Proyecto Go NFT de andamios para ERC-721
Blockchain App Builder toma la entrada de su archivo de especificación NFT y genera un proyecto de código de cadenas de andamios totalmente funcional.
El proyecto genera automáticamente clases y funciones de ciclo de vida de NFT, incluidos los métodos CRUD y no CRUD. La validación de argumentos, la canalización/anulación de canalización y la capacidad de persistencia transparente se admiten automáticamente.
Para obtener información sobre el proyecto andamio y los métodos que no están directamente relacionados con NFT, consulte Scaffolded Go Chaincode Project.
Modelo
La capacidad de persistencia transparente, o ORM simplificado, se captura en la clase 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"`
}
Controlador
Solo hay un controlador principal.
type Controller struct {
Ctx trxcontext.TrxContext
}
Puede crear cualquier número de clases, funciones o archivos, pero solo se pueden invocar los métodos definidos en la clase de controlador principal. Los otros métodos están ocultos.
Puede utilizar los métodos de SDK de token para escribir métodos personalizados para la aplicación de negocio.
Métodos NFT generados automáticamente
Blockchain App Builder genera automáticamente métodos para soportar los ciclos de vida de NFT y NFT. Puede utilizar estos métodos para inicializar NFT, gestionar roles y cuentas y completar otras tareas del ciclo de vida de NFT sin necesidad de codificación adicional.
Blockchain App Builder genera automáticamente métodos para soportar los ciclos de vida de NFT y NFT. Puede utilizar estos métodos para inicializar NFT, gestionar roles y cuentas y completar otras tareas del ciclo de vida de NFT sin necesidad de codificación adicional. Los métodos de controlador deben ser públicos para poder ser invocables. Los nombres de métodos públicos comienzan con un carácter en mayúscula. Los nombres de método que comienzan con un carácter en minúscula son privados.
- Gestión del Control de Acceso
- Gestión de configuración de token
- Gestión de cuentas
- Gestión de Roles
- Gestión del historial de transacciones
- Gestión del comportamiento de los tokens
Métodos para la gestión del control de acceso
-
AddTokenAdmin
- Este método agrega un usuario como
Token Admin
del código de cadenas. Este método solo puede ser llamado por unToken Admin
del código de cadena. -
RemoveTokenAdmin
- Este método elimina un usuario como
Token Admin
del código de cadenas. Este método solo puede ser llamado por unToken Admin
del código de cadena. No puede utilizar este método para eliminarse a sí mismo comoToken Admin
. -
IsTokenAdmin
- Este método devuelve el valor booleano
true
si el emisor de llamada de la función esToken Admin
; de lo contrario, devuelvefalse
. UnToken Admin
puede llamar a esta función en cualquier otro usuario de la red de blockchain. Otros usuarios pueden llamar a este método solo en sus propias cuentas. -
GetAllTokenAdmins
- Este método devuelve una lista de todos los usuarios que son
Token Admin
del código de cadenas. Este método solo puede ser llamado por elToken Admin
del código de cadena.
Métodos para la gestión de configuración de token
-
Init
- Este método se llama cuando se crea una instancia del código de cadena. Cada
Token Admin
se identifica mediante la informaciónUserId
yOrgId
en el parámetroadminList
.UserId
es el nombre de usuario o el ID de correo electrónico del propietario de la instancia o del usuario que está conectado a la instancia.OrgId
es el ID de proveedor de servicios de miembros (MSP) del usuario en la organización de red actual. El parámetroadminList
es obligatorio la primera vez que despliegue el código de cadena. Si va a actualizar el código de cadenas, pase una lista vacía ([]
). Cualquier otra información del parámetroadminList
se ignora durante las actualizaciones. -
GetAllTokens
- Este método devuelve todos los activos de token que se guardan en la base de datos de estado. Este método solo puede ser llamado por un
Token Admin
del código de cadena. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform. -
GetAllTokensByUser
- Este método devuelve todos los activos de token que son propiedad de un usuario especificado. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o por el propietario de la cuenta. -
GetTokenById
- Este método devuelve un objeto de token si el token está presente en la base de datos de estado. Este método solo puede ser llamado por un
Token Admin
del código de cadena o el propietario del token. -
GetTokenHistory
- Este método devuelve el historial de un ID de token especificado. Este método solo se puede llamar cuando está conectado a la red remota de Oracle Blockchain Platform. Cualquiera puede llamar a este método.
-
getTokenObject
- Se trata de un método de utilidad que devuelve una instancia del token para un ID de token especificado. Muchos de los métodos generados automáticamente utilizan este método para recuperar objetos de token. Puede llamar a este método según sea necesario desde sus métodos personalizados. Al crear un activo o una clase con token, actualice el caso de cambio con la clase
Token
correspondiente para devolver el objeto de token correcto. El comandoochain sync
del creador de aplicaciones de blockchain crea automáticamente un caso de cambio cuando se crea un activo tokenizado en el archivo de especificación. Debido a que este método es privado, no es directamente invocable y solo se puede llamar desde otros métodos. -
OwnerOf
- Este método devuelve el ID de cuenta del propietario del ID de token especificado. Cualquiera puede llamar a este método.
-
Name
- Este método devuelve el nombre de la clase de token. Cualquiera puede llamar a este método.
-
Symbol
- Este método devuelve el símbolo de la clase de token. Cualquiera puede llamar a este método.
-
TokenURI
- Este método devuelve el URI de un token especificado. Cualquiera puede llamar a este método.
-
TotalSupply
- Este método devuelve el número total de tokens acuñados. Este método solo puede ser llamado por un
Token Admin
del código de cadena. -
TotalNetSupply
- Este método devuelve el número total de tokens minados menos el número de tokens quemados. Este método solo puede ser llamado por un
Token Admin
del código de cadena.
Métodos para la gestión de cuentas
-
CreateAccount
- Este método crea una cuenta para un usuario y token especificados. Se debe crear una cuenta para cualquier usuario que tenga tokens en cualquier momento. Las cuentas realizan un seguimiento del número de NFT que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con el token. Solo puede crear una cuenta de NFT por usuario.
Un ID de cuenta es un juego alfanumérico de caracteres, con el prefijo
oaccount~
y seguido de un hash SHA-256 del ID de proveedor de servicios de miembros (OrgId
) del usuario en la organización de red actual, el nombre de usuario o el ID de correo electrónico (UserId
) del propietario de la instancia o del usuario que está conectado a la instancia y la cadena constantenft
. Este método solo puede ser llamado por elToken Admin
del código de cadena. -
BalanceOf
- Este método devuelve el número total de transacciones de financiación de valores que tiene un usuario especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o por el propietario de la cuenta. -
GetAllAccounts
- Este método devuelve una lista de todas las cuentas. Este método solo puede ser llamado por un
Token Admin
del código de cadena. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform. -
GetAccountByUser
- Este método devuelve los detalles de cuenta de un usuario especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadena o elAccount Owner
de la cuenta. -
GetUserByAccountId
- Este método devuelve los detalles de usuario de una cuenta especificada. Cualquier usuario puede llamar a este método.
-
GetAccountHistory
- Este método devuelve el historial de cuentas de un usuario especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o por el propietario de la cuenta.
Métodos para la gestión de roles
-
AddRole
- Este método agrega un rol a un usuario especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadena. -
RemoveRole
- Este método elimina un rol de un usuario especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadena. -
GetAccountsByRole
- Este método devuelve una lista de todos los ID de cuenta para un rol especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadena. -
GetUsersByRole
- Este método devuelve una lista de todos los usuarios para un rol especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadena. -
IsInRole
- Este método devuelve un valor booleano para indicar si un usuario tiene un rol especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadena o elAccount Owner
de la cuenta.
Métodos para la gestión del historial de transacciones
-
GetAccountTransactionHistory
- Este método devuelve el historial de transacciones de la cuenta para un usuario especificado. El
Token Admin
del código de cadenas o el propietario de la cuenta pueden llamar a este método. -
GetAccountTransactionHistoryWithFilters
- Este método devuelve el historial de transacciones de cuentas para un usuario especificado, filtrado por
PageSize
,Bookmark
,StartTime
yEndTime
. Este método solo se puede llamar cuando está conectado a la red remota de Oracle Blockchain Platform. Este método solo puede ser llamado por unToken Admin
del código de cadenas o por el propietario de la cuenta. -
GetTransactionById
- Este método devuelve el historial de transacciones para un ID de transacción especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o por el propietario de la cuenta. -
DeleteHistoricalTransactions
- Este método suprime las transacciones anteriores a un registro de hora especificado en la base de datos de estado. Este método solo puede ser llamado por el
Token Admin
del código de cadena.
Métodos para la gestión del comportamiento de los tokens: comportamiento de Mintable
-
Create<Token Name>Token
- Este método crea (mintiza) una NFT. El activo y las propiedades asociadas se guardan en la base de datos de estado. El emisor de esta transacción debe tener una cuenta de token. El emisor de esta transacción se convierte en el propietario de la NFT. Si el archivo de especificación de token incluye la sección
roles
parabehaviors
y la propiedadminter_role_name
pararoles
, el emisor de la llamada de la transacción debe tener el rol minter. De lo contrario, cualquier emisor de llamada puede acuñar NFT. -
Update<Token Name>Token
- Este método actualiza las propiedades del token. Este método solo puede ser llamado por el usuario que es el propietario o creador del token. Después de crear un activo de token, solo el propietario del token puede actualizar las propiedades personalizadas del token. Si el usuario es propietario del token y creador de un token, también puede actualizar la propiedad
TokenDesc
. No se pueden actualizar los metadatos de token. Debe transferir todas las propiedades de token a este método, incluso si desea actualizar solo determinadas propiedades.
Métodos para la gestión del comportamiento de los tokens: comportamiento transferible
-
SafeTransferFrom
- Este método transfiere la propiedad de la NFT especificada del emisor de la llamada a otra cuenta. Este método incluye las siguientes validaciones:
- El token existe y no se ha quemado.
- La cuenta del remitente y la cuenta del receptor existen y no son la misma cuenta.
- La cuenta del remitente es propietaria del token.
- El emisor de la llamada de la función es el remitente.
-
TransferFrom
- Este método transfiere la propiedad de la NFT especificada de una cuenta de remitente a una cuenta de receptor. Es responsabilidad de la persona que llama pasar los parámetros correctos. Cualquier usuario puede llamar a este método, no solo al propietario del token. Este método incluye las siguientes validaciones:
- El token existe y no se ha quemado.
- La cuenta del remitente y la cuenta del receptor existen y no son la misma cuenta.
- La cuenta del remitente es propietaria del token.
Métodos para la gestión del comportamiento de los tokens: comportamiento que se puede quemar
-
Burn
- Este método desactiva o quema la NFT especificada de la cuenta del emisor de la llamada. El emisor de la llamada de este método debe tener una cuenta. Un token no se puede quemar a menos que el archivo de especificación de token incluya el comportamiento
burnable
. Si no se especifica ninguna propiedadburner_role_name
en la secciónroles
del archivo de especificación, el propietario del token puede grabar el token. Si se especifica una propiedadburner_role_name
en la secciónroles
, el usuario asignado al rol de quemador que también es el minter (creador) del token puede grabar el token. -
BurnNFT
- Este método desactiva o graba la NFT especificada de la cuenta del emisor de la llamada y devuelve un objeto de token y un historial de tokens. El emisor de la llamada de este método debe tener una cuenta. Un token no se puede quemar a menos que el archivo de especificación de token incluya el comportamiento
burnable
. Si no se especifica ninguna propiedadburner_role_name
en la secciónroles
del archivo de especificación, el propietario del token puede grabar el token. Si se especifica una propiedadburner_role_name
en la secciónroles
, el usuario asignado al rol de quemador que también es el minter (creador) o el propietario del token puede grabar el token.
Métodos personalizados
Puede utilizar los métodos de SDK de token para escribir métodos personalizados para la aplicación de negocio.
En el siguiente ejemplo se muestra cómo utilizar métodos de SDK de token en métodos personalizados. Cuando se llama al método Sell
, publica un token para la venta por un precio especificado.
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étodos de SDK de NFT
- Gestión del Control de Acceso
- Gestión de configuración de token
- Gestión de cuentas
- Gestión de Roles
- Gestión del historial de transacciones
- Gestión del comportamiento de los tokens
Métodos para la gestión del control de acceso
Token Admin
o Account Owner
del token. Puede utilizar esta función para asegurarse de que las operaciones solo las realizan los usuarios deseados. Cualquier acceso no autorizado genera un error. Para utilizar la función de control de acceso, importe la clase Authorization
del módulo ../lib/auth
.import { ERC721Authorization } from '../lib/erc721-auth';
-
CheckAuthorization
- Utilice este método para agregar una comprobación de control de acceso a una operación. La mayoría de los métodos generados automáticamente incluyen el control de acceso. Algunos métodos de token solo pueden ser ejecutados por
ERC721Admin
oAccount Owner
del token o porMultipleAccountOwner
para usuarios con varias cuentas. El métodoCheckAuthorization
forma parte del paqueteerc721Auth
, al que se accede a través de la estructuraCtx
(receptor). La asignación de control de acceso se describe en el archivooChainUtil.go
, como se muestra en el siguiente texto. Puede modificar el control de acceso editando el archivooChainUtil.go
. Para utilizar su propio control de acceso o para desactivar el control de acceso, elimine el código de control de acceso de los métodos de controlador generados automáticamente y los métodos personalizados.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
- Este método devuelve una asignación con el valor booleano
true
si el emisor de llamada de la función esToken Admin
. De lo contrario, el método devuelvefalse
. -
AddAdmin
- Este método agrega un usuario como
Token Admin
del código de cadena de token. -
RemoveAdmin
- Este método elimina un usuario como
Token Admin
del código de cadena de token. -
GetAllAdmins
- Este método devuelve una lista de todos los usuarios
Token Admin
. -
GetAllAdminUsers
- Este método devuelve una lista de todos los usuarios
Token Admin
.
Métodos para la gestión de configuración de token
-
CreateToken
- Este método crea un token y guarda sus propiedades en la base de datos de estado. Sólo los usuarios con el rol minter pueden llamar a este método.
-
GetTokenUri
- Este método devuelve el URI de token para un token especificado.
-
TokenUri
- Este método devuelve el URI de token para un token especificado.
-
Symbol
- Este método devuelve el símbolo de la clase de token.
-
Name
- Este método devuelve el nombre de la clase de token.
-
OwnerOf
- Este método devuelve el ID de cuenta del propietario de un token especificado.
-
TotalSupply
- Este método devuelve el número total de NFT acuñadas.
-
GetAllTokens
- Este método devuelve todos los activos de token que se guardan en la base de datos de estado. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
-
GetAllTokensByUser
- Este método devuelve todos los tokens que son propiedad de un ID de cuenta especificado. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
-
Get
- Este método devuelve el objeto de token especificado si está presente en la base de datos de estado.
-
UpdateToken
- Este método actualiza las propiedades del token. Este método solo puede ser llamado por el propietario o creador del token. Después de crear un activo de token, solo el propietario del token puede actualizar las propiedades personalizadas del token. Si el usuario es propietario del token y creador de un token, también puede actualizar la propiedad
TokenDesc
. No se pueden actualizar los metadatos de token. Debe transferir todas las propiedades de token a este método, incluso si desea actualizar solo determinadas propiedades. -
History
- Este método devuelve el historial para el token especificado.
-
GetNewCtx
- Este método devuelve un nuevo objeto
TrxContext
. La estructuratrxcontext
contiene referencias a todas las bibliotecas de SDK. Acceda a los métodos sdk utilizando solo este objeto. El objetotrxcontext
mantiene la exclusividad mutua de los stubs de transacción en las bibliotecas SDK cuando se ejecutan transacciones simultáneas.
Métodos para la gestión de cuentas
-
GenerateAccountId
- Este método devuelve un ID de cuenta, formado por la concatenación del ID de proveedor de servicios de miembros (
orgId
) y el nombre de usuario o ID de correo electrónico (userId
) y, a continuación, la creación de un hash SHA-256. -
CreateAccount
- Este método crea una cuenta para un usuario especificado. Se debe crear una cuenta para cualquier usuario que tenga tokens en cualquier momento. Las cuentas realizan un seguimiento del número de NFT que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con el token. Solo puede crear una cuenta de NFT por usuario.
Un ID de cuenta es un juego alfanumérico de caracteres, con el prefijo
oaccount~
y seguido de un hash SHA-256 del ID de proveedor de servicios de miembros (org_id
) del usuario en la organización de red actual, el nombre de usuario o el ID de correo electrónico (userId
) del propietario de la instancia o del usuario que está conectado a la instancia y la cadena constantenft
. -
GetAllAccounts
- Este método devuelve una lista de todas las cuentas. Este método utiliza consultas enriquecidas de SQL de base de datos de Berkeley y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
-
History
- Este método devuelve una matriz de los detalles del historial de cuentas para una cuenta especificada.
-
GetUserByAccountId
- Este método devuelve los detalles de usuario de una cuenta especificada.
-
GetAccountWithStatusByUser
- Este método devuelve los detalles de la cuenta de un usuario especificado, incluido el estado de la cuenta. Este método solo puede ser llamado por un
Token Admin
del código de cadena o elAccount Owner
de la cuenta. -
GetAccountByUser
- Este método devuelve los detalles de cuenta de un usuario especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadena o elAccount Owner
de la cuenta. -
BalanceOf
- Este método devuelve el número total de transacciones de financiación de valores que tiene el usuario especificado.
Métodos para la gestión de roles
-
AddRoleMember
- Este método agrega un rol a un usuario especificado.
-
RemoveRoleMember
- Este método elimina un rol de un usuario y token especificados. Un ID de cuenta se forma mediante la creación de un hash SHA-256 del ID de proveedor de servicios de miembros concatenado (
orgId
) y el nombre de usuario o ID de correo electrónico (userId
). -
IsInRole
- Este método devuelve un valor booleano para indicar si un usuario y un token tienen un rol especificado. Un ID de cuenta se forma mediante la creación de un hash SHA-256 del ID de proveedor de servicios de miembros concatenado (
orgId
) y el nombre de usuario o ID de correo electrónico (userId
). -
GetAccountsByRole
- Este método devuelve una lista de todos los ID de cuenta para un rol especificado.
-
GetUsersByRole
- Este método devuelve una lista de todos los usuarios para un rol especificado.
Métodos para la gestión del historial de transacciones
-
GetAccountTransactionHistory
- Este método devuelve una matriz de los detalles del historial de transacciones para una cuenta especificada.
-
GetAccountTransactionHistoryWithFilters
- Este método devuelve el historial de transacciones de cuentas para un usuario especificado, filtrado por
PageSize
,Bookmark
,startTime
yendTime
. Este método solo se puede llamar cuando está conectado a la red remota de Oracle Blockchain Platform. -
GetTransactionById
- Este método devuelve el historial de un activo
Transaction
. -
DeleteHistoricalTransactions
- Este método suprime las transacciones anteriores a una fecha especificada de la base de datos de estado.
Gestión del comportamiento de los tokens: comportamiento de Mintable
-
GetMaxMintQuantity
- Este método devuelve la cantidad máxima mínima de un token. Si el comportamiento
max_mint_quantity
no está configurado en el archivo de especificación, el valor por defecto es 0 y se puede minar un número infinito de tokens. -
GetTotalMintedTokens
- Este método devuelve el número neto total de tokens disponibles en el sistema para el token especificado. El número neto de tokens disponibles es el número total de tokens minados menos el número de tokens quemados.
Gestión del comportamiento de los tokens: comportamiento transferible
-
SafeTransferFrom
- Este método transfiere la propiedad de la NFT especificada del emisor de la llamada a otra cuenta. Este método incluye las siguientes validaciones:
- El token existe y no se ha quemado.
- La cuenta del remitente y la cuenta del receptor existen y no son la misma cuenta.
- La cuenta del remitente es propietaria del token.
- El emisor de la llamada de la función es el remitente.
-
TransferFrom
- Este método transfiere la propiedad de la NFT especificada de una cuenta de remitente a una cuenta de receptor. Es responsabilidad de la persona que llama pasar los parámetros correctos. Cualquier usuario puede llamar a este método, no solo al propietario del token. Este método incluye las siguientes validaciones:
- El token existe y no se ha quemado.
- La cuenta del remitente y la cuenta del receptor existen y no son la misma cuenta.
- La cuenta del remitente es propietaria del token.
Gestión del comportamiento de los tokens: comportamiento que se puede quemar
-
Burn
- Este método desactiva o quema la NFT especificada de la cuenta del emisor de la llamada. El emisor de la llamada de este método debe tener una cuenta. Un token no se puede quemar a menos que el archivo de especificación de token incluya el comportamiento
burnable
. Si no se especifica ninguna propiedadburner_role_name
en la secciónroles
del archivo de especificación, el propietario del token puede grabar el token. Si se especifica una propiedadburner_role_name
en la secciónroles
, el usuario asignado al rol de quemador que también es el minter (creador) del token puede grabar el token. El métodoburn
forma parte del paqueteERC721Token
, al que se accede a través del receptor de la estructuraCtx
.