Proyecto de token TypeScript con andamios para ERC-1155
Blockchain App Builder toma la entrada de su archivo de especificación de token y genera un proyecto de código de cadenas completamente funcional.
El proyecto genera automáticamente clases y funciones de ciclo de vida de token, 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 los tokens, consulte Scaffolded TypeScript Chaincode Project.
Modelo
Cada clase de modelo con token amplía la clase OchainModel
. La capacidad de persistencia transparente, o ORM simplificado, se captura en la clase OchainModel
. El siguiente modelo muestra un token no fungible completo.
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;
}
El siguiente modelo muestra un token fraccional no fungible.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;
}
Controlador
La clase de controlador principal amplía la clase OchainController
. Solo hay un controlador principal.
export class DigiCurrCCController extends OchainController{
Puede crear cualquier número de clases, funciones o archivos, pero sólo 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 SDK de token para escribir métodos personalizados para la aplicación de negocio.
Métodos de token generados automáticamente
Blockchain App Builder genera automáticamente métodos para admitir tokens y ciclos de vida de tokens. Puede utilizar estos métodos para inicializar tokens, gestionar roles y cuentas y completar otras tareas del ciclo de vida del token sin necesidad de codificación adicional. Los métodos de controlador deben tener un decorador @Validator(...params)
para que se pueda invocar.
- Gestión del Control de Acceso
- Gestión de configuración de tokens
- Gestión de Cuentas
- Gestión de Roles
- Gestión de historial de transacciones
- Gestión del comportamiento de los tokens
Métodos para la Gestión del Control de Acceso
-
isTokenAdmin
- Este método devuelve el valor booleano
true
si el emisor de llamada de la función esToken Admin
; de lo contrario, devuelvefalse
. Este método solo puede ser llamado porToken Admin
del código de cadenas. -
addTokenAdmin
- Este método agrega un usuario como
Token Admin
del código de cadenas. Este método solo puede ser llamado porToken Admin
del código de cadenas. -
removeTokenAdmin
- Este método elimina un usuario como
Token Admin
del código de cadenas. Este método solo puede ser llamado porToken Admin
del código de cadenas. No puede eliminarse comoToken Admin
. -
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 porToken Admin
del código de cadenas.
Métodos de Gestión de Configuración de Token
-
init
- Este método se llama cuando se crea una instancia del código de cadenas. 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 el usuario que está conectado a la instancia.orgId
es el ID del 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 cadenas. Si está actualizando el código de cadenas, transfiera una lista vacía ([]
). Si es el usuario que desplegó inicialmente el código de cadenas, también puede especificar nuevos administradores en el parámetroadminList
al actualizar el código de cadenas. Cualquier otra información del parámetroadminList
se ignora durante las actualizaciones. -
create<Token Name>Token
- Este método crea tokens. Cada token definido tiene su propio método de creación. Para tokens fungibles, este método solo puede ser llamado por un
Token Admin
del código de cadenas. Para los tokens no fungibles, si el rol minter está definido en el archivo de especificación, cualquier usuario con el rol minter puede llamar a este método para crear un NFT. Si el rol de minter no está definido, cualquier usuario puede utilizar este método para crear NFT (mint). El usuario que llama a este método se convierte en el propietario de la NFT. -
update<Token Name>Token
- Este método actualiza tokens. Cada token definido tiene su propio método de actualización. No puede actualizar los metadatos de token ni el URI de token de tokens no fungibles. Para tokens fungibles, este método solo puede ser llamado por un
Token Admin
del código de cadenas. Para los tokens no fungibles, este método solo puede ser llamado por el propietario del token. -
getTokenHistory
- Este método devuelve el historial de un ID de token especificado. Cualquiera puede llamar a este método.
-
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
Token Admin
del código de cadenas. Este método utiliza consultas enriquecidas SQL de Berkeley DB y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform. -
getTokenById
- Este método devuelve un objeto de token si el token está presente en la base de datos de estado. Para las NFT fraccionadas, también se devuelve la lista de propietarios. Este método solo lo puede llamar un
Token Admin
del código de cadenas o el propietario del token. -
getAllTokensByUser
- Este método devuelve todos los activos de token que son propiedad de un usuario especificado. Este método utiliza consultas enriquecidas SQL de Berkeley DB y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform. Este método solo lo puede llamar un
Token Admin
del código de cadenas o el propietario de la cuenta. -
ownerOf
- Este método devuelve el ID de cuenta, el ID de organización y el ID de usuario del propietario del ID de token especificado. Cualquiera puede llamar a este método.
-
URI
- Este método devuelve el URI de un 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.
-
totalSupply
- Este método devuelve el número total de tokens acuñados. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token. Este método solo puede ser llamado por
Token Admin
del código de cadenas. -
totalNetSupply
- Este método devuelve el número total de tokens acuñados menos el número de tokens quemados. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token. Este método solo puede ser llamado por
Token Admin
del código de cadenas. -
getTokensByName
- Este método devuelve todos los activos de token para un nombre de token especificado. Este método utiliza consultas enriquecidas SQL de Berkeley DB y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform. Este método solo puede ser llamado por
Token Admin
del código de cadenas. -
getTokenDecimal
- Este método devuelve el número de posiciones decimales para un token especificado. Este método solo puede ser llamado por
Token Admin
del código de cadenas.
Métodos de gestión de cuentas
-
createAccount
- Este método crea una cuenta para un usuario especificado y cuentas de token asociadas para tokens fungibles o no fungibles. Se debe crear una cuenta para cualquier usuario que tenga tokens en cualquier momento. La cuenta de usuario realiza un seguimiento de la cuenta NFT y las cuentas de token fungibles que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con tokens. Este método solo puede ser llamado por
Token Admin
del código de cadenas.Una cuenta de usuario tiene un ID único, formado por un hash SHA-256 del parámetro
orgId
y el parámetrouserId
.Un usuario puede tener varias cuentas de token fungibles con ID de cuenta únicos. Los ID de cuenta de token fungible están formados por un hash SHA-256 del parámetro
orgId
, el parámetrouserId
, la cadena constanteft
separada por el símbolo tilde (~
) y un número de contador que significa el índice de la cuenta fungible que se está creando separado por el símbolo tilde (~
).Un usuario solo puede tener una cuenta de token no fungible. Los ID de cuenta de token no fungibles son únicos y están formados por un hash SHA-256 del parámetro
orgId
, el parámetrouserId
y la cadena constantenft
separados por el símbolo tilde (~
). Todos los tokens no fungibles que posee un usuario, ya sean completos o fraccionales, están vinculados a esta cuenta.Los ID de cuenta de usuario empiezan por
ouaccount~
. Los ID de cuenta de token comienzan conoaccount~
. -
createUserAccount
- Este método crea una cuenta para un usuario especificado. Se debe crear una cuenta para cualquier usuario que tenga tokens en cualquier momento. La cuenta de usuario realiza un seguimiento de la cuenta NFT y las cuentas de token fungibles que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con tokens.
Un ID de cuenta es un hash SHA-256 del parámetro
orgId
y del parámetrouserId
. Este método solo puede ser llamado porToken Admin
del código de cadenas. -
createTokenAccount
- Este método crea una cuenta de token fungible o no fungible para asociarla a una cuenta de usuario.
Un usuario puede tener varias cuentas de token fungibles con ID de cuenta únicos. Los ID de cuenta de token fungible están formados por un hash SHA-256 del parámetro
orgId
, el parámetrouserId
, la cadena constanteft
separada por el símbolo tilde (~
) y un número de contador que significa el índice de la cuenta fungible que se está creando separado por el símbolo tilde (~
).Un usuario solo puede tener una cuenta de token no fungible. Los ID de cuenta de token no fungibles son únicos y están formados por un hash SHA-256 del parámetro
orgId
, el parámetrouserId
y la cadena constantenft
separados por el símbolo tilde (~
). Todos los tokens no fungibles que posee un usuario, ya sean completos o fraccionales, están vinculados a esta cuenta.Este método solo puede ser llamado por
Token Admin
del código de cadenas. -
associateFungibleTokenAccount
- Este método asocia la cuenta de token fungible de un usuario a un token fungible concreto.
Este método solo puede ser llamado por
Token Admin
del código de cadenas. -
getAccountHistory
- Este método devuelve el historial de una cuenta de token especificada. Se trata de un método asíncrono. Este método solo lo puede llamar un
Token Admin
del código de cadenas o el propietario de la cuenta. -
getAccount
- Este método devuelve los detalles de la cuenta de token para un usuario especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o elAccount Owner
de la cuenta. -
getAllAccounts
- Este método devuelve detalles de todas las cuentas de usuario. Este método solo puede ser llamado por
Token Admin
del código de cadenas. -
getAccountDetailsByUser
- Este método devuelve un resumen de cuenta para un usuario especificado y detalles de tokens fungibles y no fungibles que están asociados con el usuario. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o elAccount Owner
de la cuenta. -
getUserByAccountId
- Este método devuelve los detalles de usuario de un ID de cuenta especificado. Este método puede ser llamado por cualquier usuario.
Métodos de Gestión de Roles
-
addRole
- Este método agrega un rol a un usuario y token especificados. Este método solo puede ser llamado por
Token Admin
del código de cadenas. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token. El usuario especificado debe tener una cuenta de token asociada con el token fungible o una cuenta de token no fungible para los roles NFT. El rol especificado debe existir en el archivo de especificación para el token. -
isInRole
- Este método devuelve un valor booleano para indicar si un usuario tiene un rol especificado. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o elAccount Owner
de la cuenta. El usuario especificado debe tener una cuenta de token asociada con el token fungible o una cuenta de token no fungible para los roles NFT. El rol especificado debe existir en el archivo de especificación para el token. -
removeRole
- Este método elimina un rol de un usuario y token especificados. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token. Este método solo puede ser llamado por
Token Admin
del código de cadenas. El usuario especificado debe tener una cuenta de token asociada con el token fungible o una cuenta de token no fungible para los roles NFT. El rol especificado debe existir en el archivo de especificación para el token. -
getAccountsByRole
- Este método devuelve una lista de todos los ID de cuenta para un rol y token especificados. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token. Este método solo puede ser llamado por
Token Admin
del código de cadenas. -
getUsersByRole
- Este método devuelve una lista de todos los usuarios para un rol y token especificados. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token. Este método solo puede ser llamado por
Token Admin
del código de cadenas.
Métodos para la gestión del historial de transacciones
-
getAccountTransactionHistory
- Este método devuelve el historial de transacciones de la cuenta. Este método solo lo puede llamar un
Token Admin
del código de cadenas o el propietario de la cuenta. Para tokens no fungibles, este método solo se puede llamar cuando está conectado a la red remota de Oracle Blockchain Platform. -
getTransactionById
- Este método devuelve los detalles de transacción para un ID de transacción especificado. Cualquiera puede llamar a este método.
-
deleteHistoricalTransactions
- Este método elimina las transacciones antes de un registro de hora especificado de la base de datos de estado. Este método solo puede ser llamado por
Token Admin
del código de cadenas.
Métodos para la gestión del comportamiento del token: comportamiento mínimo
-
mintBatch
- Este método crea (minta) varios tokens en una operación por lotes. Este método crea solo tokens fungibles o tokens fraccionales no fungibles.
En el caso de tokens fungibles, si el rol minter está definido en el archivo de especificación, cualquier usuario con el rol minter puede llamar a este método. Si no es así, cualquier usuario puede utilizar este método para acuñar tokens. No puede importar más que la propiedad
max_mint_quantity
del token si esa propiedad se especificó cuando se creó o actualizó el token.Para los tokens no fungibles, si el rol mínimo está definido en el archivo de especificación, cualquier usuario con el rol mínimo puede llamar a este método. Si no es así, cualquier usuario puede utilizar este método para acuñar tokens. Además, el emisor de llamada también debe ser el creador del token. No hay límite superior para la cantidad de tokens fraccionales no fungibles que se pueden acuñar.
No puede utilizar este método para acuñar un token no fungible completo.
Métodos para la gestión del comportamiento de token: comportamiento transferible
-
batchTransferFrom
- Este método completa una operación por lotes que transfiere tokens especificados en una lista de ID de token de un usuario a otro usuario.
Para las NFT, debido a que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser propietario del token.
Para las NFT fraccionadas, si un usuario (incluido el creador del token) transfiere todos los recursos compartidos que posee, entonces pierde la propiedad del token. Si se transfiere cualquier parte de un token a un usuario, ese usuario se convierte automáticamente en uno de los propietarios de la NFT fraccional.
Este método no valida que el emisor de llamada del método sea el remitente especificado. Este método puede ser llamado por cualquier usuario.
-
safeBatchTransferFrom
- Este método completa una operación por lotes que transfiere tokens especificados en una lista de ID de token de un usuario a otro usuario.
Para las NFT, debido a que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser propietario del token.
Para las NFT fraccionadas, si un usuario (incluido el creador del token) transfiere todos los recursos compartidos que posee, entonces pierde la propiedad del token. Si se transfiere cualquier parte de un token a un usuario, ese usuario se convierte automáticamente en uno de los propietarios de la NFT fraccional.
El emisor de llamada del método debe ser el remitente especificado. Este método puede ser llamado por cualquier usuario.
-
balanceOfBatch
- Este método completa una operación por lotes que obtiene el saldo de las cuentas de token. Los detalles de la cuenta se especifican en tres listas separadas de ID de organización, ID de usuario e ID de token. Este método solo lo puede llamar un
Token Admin
del código de cadenas o los propietarios de la cuenta. Los propietarios de cuentas solo pueden ver los detalles de saldo de las cuentas de su propiedad. -
exchangeToken
- Este método intercambia tokens entre cuentas especificadas. Este método solo admite el intercambio entre un NFT y un token fungible o un token fungible y un NFT. El NFT puede ser entero o fraccional. Solo el propietario de la cuenta puede llamar a este método.
Métodos para la Gestión del Comportamiento de Token: Comportamiento Quemable
-
burnBatch
- Este método desactiva o quema los tokens fungibles y no fungibles especificados. Cualquier usuario con el rol de quemador puede llamar a este método.
-
burnNFT
- Este método desactiva o quema el token no fungible especificado y devuelve un objeto de token y un historial de token. Cualquier usuario con el rol de quemador puede llamar a este método.
Métodos de SDK
- Gestión del Control de Acceso
- Gestión de configuración de tokens
- Gestión de Cuentas
- Gestión de Roles
- Gestión de historial de transacciones
- Gestión del comportamiento de los tokens
Métodos para la Gestión del Control de Acceso
-
checkAuthorization
- Utilice este método para agregar una comprobación de control de acceso a una operación. Es una función asíncrona. Algunos métodos de token solo los puede ejecutar
Token Admin
oAccountOwner
del token oMultipleAccountOwner
para usuarios con varias cuentas. La asignación de control de acceso se describe en el archivo../lib/constant.ts
. Puede modificar el control de acceso editando el archivo../lib/constant.ts
. 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.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"], },
-
isUserTokenAdmin
- Este método devuelve el valor booleano
true
si el usuario especificado esToken Admin
y, de lo contrario,false
. El método solo se puede llamar medianteToken Admin
del código de cadenas de token. -
addAdmin
- Este método agrega un usuario como
Token Admin
del código de cadena de token. El método solo se puede llamar medianteToken Admin
del código de cadenas de token. -
removeAdmin
- Este método elimina un usuario como
Token Admin
del código de cadena de token. El método solo se puede llamar medianteToken Admin
del código de cadenas de token. No puede eliminarse comoToken Admin
. -
getAllAdmins
- Este método devuelve una lista de todos los usuarios
Token Admin
.
Métodos de Gestión de Configuración de Token
-
save
- Este método crea tokens. Cada token definido tiene su propio método de creación. Para tokens no fungibles, si el rol minter está definido en el archivo de especificación, cualquier usuario con el rol minter puede llamar a este método para crear un NFT. Si no es así, cualquier usuario puede utilizar este método para crear NFT (mint). El usuario que llama a este método se convierte en el propietario de la NFT (entero o fraccional).
-
update
- Este método actualiza tokens. No puede actualizar los metadatos de token ni el URI de token de tokens no fungibles.
-
history (Token)
- Este método devuelve el historial de un ID de token especificado.
-
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
Token Admin
del código de cadenas. Este método utiliza consultas enriquecidas SQL de Berkeley DB y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform. -
get (Token)
- Este método devuelve un objeto de token si el token está presente en la base de datos de estado. Este método solo lo puede llamar un
Token Admin
del código de cadenas o el propietario del token. -
getAllTokensByUser
- Este método devuelve todos los activos de token que son propiedad de un usuario especificado. Este método utiliza consultas enriquecidas SQL de Berkeley DB y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
-
ownerOf
- Este método devuelve el ID de cuenta, el ID de organización y el ID de usuario del propietario del ID de token especificado.
-
tokenURI
- Este método devuelve el URI de un 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.
-
totalSupply
- Este método devuelve el número total de tokens acuñados. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token.
-
totalNetSupply
- Este método devuelve el número total de tokens acuñados menos el número de tokens quemados. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token.
-
getTokensByName
- Este método devuelve todos los activos de token para un nombre de token especificado. Este método utiliza consultas enriquecidas SQL de Berkeley DB y solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform.
-
getDecimals
- Este método devuelve el número de posiciones decimales para un token especificado. Si no se especifica el comportamiento divisible para el token, se devuelve el valor predeterminado de cero decimales.
Métodos de gestión de cuentas
-
createAccount
- Este método crea una cuenta para un usuario especificado y cuentas de token asociadas para tokens fungibles o no fungibles. Se debe crear una cuenta para cualquier usuario que tenga tokens en cualquier momento. La cuenta de usuario realiza un seguimiento de la cuenta NFT y las cuentas de token fungibles que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con tokens. Este método solo puede ser llamado por
Token Admin
del código de cadenas.Una cuenta de usuario tiene un ID único, formado por un hash SHA-256 del parámetro
orgId
y el parámetrouserId
.Un usuario puede tener varias cuentas de token fungibles con ID de cuenta únicos. Los ID de cuenta de token fungible están formados por un hash SHA-256 del parámetro
orgId
, el parámetrouserId
, la cadena constanteft
separada por el símbolo tilde (~
) y un número de contador que significa el índice de la cuenta fungible que se está creando separado por el símbolo tilde (~
).Un usuario solo puede tener una cuenta de token no fungible. Los ID de cuenta de token no fungibles son únicos y están formados por un hash SHA-256 del parámetro
orgId
, el parámetrouserId
y la cadena constantenft
separados por el símbolo tilde (~
). Todos los tokens no fungibles que posee un usuario, ya sean completos o fraccionales, están enlazados a esta única cuenta de token no fungible. -
createUserAccount
- Este método crea una cuenta para un usuario especificado. Se debe crear una cuenta para cualquier usuario que tenga tokens en cualquier momento. La cuenta de usuario realiza un seguimiento de la cuenta NFT y las cuentas de token fungibles que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con tokens.
Un ID de cuenta es un hash SHA-256 del parámetro
orgId
y del parámetrouserId
. Este método solo puede ser llamado porToken Admin
del código de cadenas. -
createTokenAccount
- Este método crea una cuenta de token fungible o no fungible para asociarla a una cuenta de usuario.
Un usuario puede tener varias cuentas de token fungibles con ID de cuenta únicos. Los ID de cuenta de token fungible están formados por un hash SHA-256 del parámetro
orgId
, el parámetrouserId
, la cadena constanteft
separada por el símbolo tilde (~
) y un número de contador que significa el índice de la cuenta fungible que se está creando separado por el símbolo tilde (~
).Un usuario solo puede tener una cuenta de token no fungible. Los ID de cuenta de token no fungibles son únicos y están formados por un hash SHA-256 del parámetro
orgId
, el parámetrouserId
y la cadena constantenft
separados por el símbolo tilde (~
). Todos los tokens no fungibles que posee un usuario, ya sean completos o fraccionales, están enlazados a esta única cuenta de token no fungible.Este método solo puede ser llamado por
Token Admin
del código de cadenas. -
associateTokenToToken
- Este método asocia la cuenta de token fungible de un usuario a un token fungible concreto.
-
getAccountHistory
- Este método devuelve el historial de una cuenta de token especificada.
-
getAccountWithStatus
- Este método devuelve los detalles de la cuenta del token, incluido el estado de la cuenta, para un usuario especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o elAccount Owner
de la cuenta. -
getAccount
- Este método devuelve los detalles de la cuenta de token para un usuario especificado. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o elAccount Owner
de la cuenta. -
getAllAccounts
- Este método devuelve detalles de todas las cuentas de usuario.
-
getAccountDetailsByUser
- Este método devuelve un resumen de cuenta para un usuario especificado y detalles de tokens fungibles y no fungibles asociados con el usuario.
-
getUserByAccountId
- Este método devuelve los detalles de usuario de un ID de cuenta especificado.
Métodos de Gestión de Roles
-
AddRoleMember
- Este método agrega un rol a un usuario y token especificados. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token.
-
isInRole
- Este método devuelve un valor booleano para indicar si un usuario tiene un rol especificado. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token.
-
removeRoleMember
- Este método elimina un rol de un usuario y token especificados. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token.
-
getAccountsByRole
- Este método devuelve una lista de todos los ID de cuenta para un rol y token especificados. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token.
-
getUsersByRole
- Este método devuelve una lista de todos los usuarios para un rol y token especificados. Los tokens fungibles se especifican mediante el ID de token. Los tokens no fungibles se especifican mediante el nombre del token.
Métodos para la gestión del historial de transacciones
-
getAccountTransactionHistory
- Este método devuelve el historial de transacciones de la cuenta. Este método solo lo puede llamar un
Token Admin
del código de cadenas o el propietario de la cuenta. Para tokens no fungibles, este método solo se puede llamar cuando está conectado a la red remota de Oracle Blockchain Platform. -
getTransactionById
- Este método devuelve los detalles de transacción para un ID de transacción especificado.
-
deleteTransactions
- Este método elimina las transacciones antes de un registro de hora especificado de la base de datos de estado.
Métodos para la gestión del comportamiento del token: comportamiento mínimo
-
mintBatch
- Este método crea (minta) varios tokens en una operación por lotes. Este método crea solo tokens fungibles o tokens fraccionales no fungibles.
En el caso de tokens fungibles, si el rol minter está definido en el archivo de especificación, cualquier usuario con el rol minter puede llamar a este método. Si no es así, cualquier usuario puede utilizar este método para acuñar tokens. No puede importar más que la propiedad
max_mint_quantity
del token si esa propiedad se especificó cuando se creó o actualizó el token.Para los tokens no fungibles, si el rol mínimo está definido en el archivo de especificación, cualquier usuario con el rol mínimo puede llamar a este método. Si no es así, cualquier usuario puede utilizar este método para acuñar tokens. Además, el emisor de llamada también debe ser el creador del token. No hay límite superior para la cantidad de tokens fraccionales no fungibles que se pueden acuñar.
No puede utilizar este método para acuñar un token no fungible completo.
Métodos para la gestión del comportamiento de token: comportamiento transferible
-
batchTransferFrom
- Este método completa una operación por lotes que transfiere tokens especificados en una lista de ID de token de un usuario a otro usuario.
Para las NFT, debido a que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser propietario del token.
Para las NFT fraccionadas, si un usuario (incluido el creador del token) transfiere todos los recursos compartidos que posee, entonces pierde la propiedad del token. Si se transfiere cualquier parte de un token a un usuario, ese usuario se convierte automáticamente en uno de los propietarios de la NFT fraccional.
Este método no valida que el emisor de llamada del método sea el remitente especificado.
-
safeBatchtransferFrom
- Este método completa una operación por lotes que transfiere tokens especificados en una lista de ID de token de un usuario a otro usuario.
Para las NFT, debido a que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser propietario del token.
Para las NFT fraccionadas, si un usuario (incluido el creador del token) transfiere todos los recursos compartidos que posee, entonces pierde la propiedad del token. Si se transfiere cualquier parte de un token a un usuario, ese usuario se convierte automáticamente en uno de los propietarios de la NFT fraccional.
El emisor de llamada del método debe ser el remitente especificado.
-
balanceOfBatch
- Este método completa una operación por lotes que obtiene el saldo de las cuentas de token. Los detalles de la cuenta se especifican en tres listas separadas de ID de organización, ID de usuario e ID de token. Este método solo lo puede llamar un
Token Admin
del código de cadenas o los propietarios de la cuenta. Los propietarios de cuentas solo pueden ver los detalles de saldo de las cuentas de su propiedad. -
exchangeToken
- Este método intercambia tokens entre cuentas especificadas. Este método sólo admite el intercambio entre un NFT (entero o fraccional) y un token fungible o un token fungible y un NFT (entero o fraccional). Solo el propietario de la cuenta puede llamar a este método.
Métodos para la Gestión del Comportamiento de Token: Comportamiento Quemable