Proyecto de token TypeScript andamiado 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 cadena de andamios totalmente 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 andamiaje 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 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 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 ninguna codificación adicional. Los métodos de controlador deben tener un decorador @Validator(...params)
que se pueda invocar.
- Gestión del Control de Acceso
- Gestión de configuración de token
- Gestión de cuentas
- Gestión de Roles
- Gestión de historial de transacciones
- Gestión de comportamiento de token
Métodos de Gestión de 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 por unToken Admin
del código de cadena. -
addTokenAdmin
- Este método agrega un usuario como
Token Admin
del código de cadena. 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 cadena. Este método solo puede ser llamado por unToken Admin
del código de cadena. No puede eliminarse comoToken Admin
. -
getAllTokenAdmins
- Este método devuelve una lista de todos los usuarios que son
Token Admin
del código de cadena. Este método solo puede ser llamado por unToken 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 instancia el 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 conectado a la instancia.orgId
es el ID del proveedor de servicios de afiliación (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 está actualizando el código de cadena, transfiera una lista vacía ([]
). Si es el usuario que desplegó inicialmente el código de cadena, también puede especificar nuevos administradores en el parámetroadminList
al actualizar el código de cadena. Cualquier otra información en el 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 los 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 no se define el rol minter, cualquier usuario puede utilizar este método para crear (mint) NFT. 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 que se define 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 los 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 identificador 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 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. -
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 puede ser llamado por un
Token Admin
del código de cadena 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 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 lo puede llamar un
Token Admin
del código de cadena 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 un
Token Admin
del código de cadena. -
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 un
Token Admin
del código de cadena. -
getTokensByName
- Este método devuelve todos los activos de token para un nombre de token 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 cadena. -
getTokenDecimal
- Este método devuelve el número de decimales para un token especificado. 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 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 de 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 los tokens. Este método solo puede ser llamado por un
Token Admin
del código de cadena.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 identificadores de cuentas de token fungibles 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 fraccionarios, están vinculados a esta cuenta.Los ID de cuenta de usuario comienzan con
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 de 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 los tokens.
Un ID de cuenta es un hash SHA-256 del parámetro
orgId
y el parámetrouserId
. Este método solo puede ser llamado por unToken Admin
del código de cadena. -
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 identificadores de cuentas de token fungibles 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 fraccionarios, están vinculados a esta cuenta.Este método solo puede ser llamado por un
Token Admin
del código de cadena. -
associateFungibleTokenAccount
- Este método asocia la cuenta de token fungible de un usuario a un token fungible en particular.
Este método solo puede ser llamado por un
Token Admin
del código de cadena. -
getAccountHistory
- Este método devuelve el historial de una cuenta de token especificada. Es un método asíncrono. Este método solo lo puede llamar un
Token Admin
del código de cadena 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 cadena 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 un
Token Admin
del código de cadena. -
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 al usuario. 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 un ID de cuenta especificado. Este método puede ser llamado por cualquier usuario.
Métodos para la 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 un
Token Admin
del código de cadena. 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 que esté asociada al token fungible o una cuenta de token no fungible para los roles de 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 cadena o elAccount Owner
de la cuenta. El usuario especificado debe tener una cuenta de token que esté asociada al token fungible o una cuenta de token no fungible para los roles de 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 un
Token Admin
del código de cadena. El usuario especificado debe tener una cuenta de token que esté asociada al token fungible o una cuenta de token no fungible para los roles de 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 un
Token Admin
del código de cadena. -
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 un
Token Admin
del código de cadena.
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 cadena o el propietario de la cuenta. Para los tokens no fungibles, este método solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform. -
getTransactionById
- Este método devuelve los detalles de la transacción para un ID de transacción especificado. Cualquiera puede llamar a este método.
-
deleteHistoricalTransactions
- Este método suprime las transacciones antes de un registro de hora especificado de la base de datos de estado. Este método solo puede ser llamado por un
Token Admin
del código de cadena.
Métodos para la gestión del comportamiento del token: comportamiento minable
-
mintBatch
- Este método crea (minuta) varios tokens en una operación por lotes. Este método crea solo tokens fungibles o tokens fraccionarios no fungibles.
Para los 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. De lo contrario, cualquier usuario puede utilizar este método para acuñar tokens. No puede acuñar 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 minter está definido en el archivo de especificación, cualquier usuario con el rol minter puede llamar a este método. De lo contrario, 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 fraccionarios 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 del 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, dado que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser el propietario del token.
En el caso de los NFT fraccionarios, si un usuario (incluido el creador del token) transfiere todas las acciones que posee, perderá la propiedad del token. Si cualquier parte de un token se transfiere 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, dado que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser el propietario del token.
En el caso de los NFT fraccionarios, si un usuario (incluido el creador del token) transfiere todas las acciones que posee, perderá la propiedad del token. Si cualquier parte de un token se transfiere 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 IDs de organización, IDs de usuario e IDs de token. Este método solo puede ser llamado por un
Token Admin
del código de cadena o por propietarios de cuenta. Los propietarios de cuentas solo pueden ver los detalles del saldo de las cuentas de las que son propietarios. -
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. La NFT puede ser total o fraccional. Este método solo puede ser llamado por el propietario de la cuenta.
Métodos para la Gestión del Comportamiento del 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 tokens. 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 token
- Gestión de cuentas
- Gestión de Roles
- Gestión de historial de transacciones
- Gestión de comportamiento de token
Métodos de Gestión de Control de Acceso
-
isUserTokenAdmin
- Este método devuelve el valor booleano
true
si el usuario especificado esToken Admin
yfalse
de lo contrario. El método solo puede ser llamado por unToken Admin
del código de cadena de token. -
addAdmin
- Este método agrega un usuario como
Token Admin
del código de cadena de token. El método solo puede ser llamado por unToken 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. El método solo puede ser llamado por unToken Admin
del código de cadena de token. No puede eliminarse comoToken Admin
. -
getAllAdmins
- Este método devuelve una lista de todos los usuarios
Token Admin
. -
checkAuthorization
- Utilice este método para agregar una comprobación de control de acceso a una operación. Se trata de una función asíncrona. Algunos métodos de token solo pueden ser ejecutados por
Token Admin
oAccountOwner
del token o porMultipleAccountOwner
para los 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 usar su propio control de acceso o desactivar el control de acceso, elimine el código de control de acceso de los métodos de controlador y métodos personalizados generados automáticamente.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"], },
Métodos para la 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 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. De lo contrario, cualquier usuario puede utilizar este método para crear (mint) NFT. El usuario que llama a este método se convierte en el propietario de la NFT (total 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 identificador 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 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. -
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 puede ser llamado por un
Token Admin
del código de cadena 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 de SQL de base de datos de Berkeley 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 de SQL de base de datos de Berkeley 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 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 para la 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 de 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 los tokens. Este método solo puede ser llamado por un
Token Admin
del código de cadena.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 identificadores de cuentas de token fungibles 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 fraccionarios, están vinculados 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 de 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 los tokens.
Un ID de cuenta es un hash SHA-256 del parámetro
orgId
y el parámetrouserId
. Este método solo puede ser llamado por unToken Admin
del código de cadena. -
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 identificadores de cuentas de token fungibles 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 fraccionarios, están vinculados a esta única cuenta de token no fungible.Este método solo puede ser llamado por un
Token Admin
del código de cadena. -
associateTokenToToken
- Este método asocia la cuenta de token fungible de un usuario a un token fungible en particular.
-
getAccountHistory
- Este método devuelve el historial de una cuenta de token especificada.
-
getAccountWithStatus
- Este método devuelve los detalles de la cuenta de 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 cadena 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 cadena 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 que están asociados al usuario.
-
getUserByAccountId
- Este método devuelve los detalles de usuario de un ID de cuenta especificado.
Métodos para la 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 cadena o el propietario de la cuenta. Para los tokens no fungibles, este método solo se puede llamar cuando se conecta a la red remota de Oracle Blockchain Platform. -
getTransactionById
- Este método devuelve los detalles de la transacción para un ID de transacción especificado.
-
deleteTransactions
- Este método suprime 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 minable
-
mintBatch
- Este método crea (minuta) varios tokens en una operación por lotes. Este método crea solo tokens fungibles o tokens fraccionarios no fungibles.
Para los 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. De lo contrario, cualquier usuario puede utilizar este método para acuñar tokens. No puede acuñar 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 minter está definido en el archivo de especificación, cualquier usuario con el rol minter puede llamar a este método. De lo contrario, 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 fraccionarios 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 del 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, dado que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser el propietario del token.
En el caso de los NFT fraccionarios, si un usuario (incluido el creador del token) transfiere todas las acciones que posee, perderá la propiedad del token. Si cualquier parte de un token se transfiere 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, dado que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser el propietario del token.
En el caso de los NFT fraccionarios, si un usuario (incluido el creador del token) transfiere todas las acciones que posee, perderá la propiedad del token. Si cualquier parte de un token se transfiere 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 IDs de organización, IDs de usuario e IDs de token. Este método solo puede ser llamado por un
Token Admin
del código de cadena o por propietarios de cuenta. Los propietarios de cuentas solo pueden ver los detalles del saldo de las cuentas de las que son propietarios. -
exchangeToken
- Este método intercambia tokens entre cuentas especificadas. Este método solo admite el intercambio entre un NFT (completo o fraccional) y un token fungible o un token fungible y un NFT (completo o fraccional). Este método solo puede ser llamado por el propietario de la cuenta.
Métodos para la Gestión del Comportamiento del Token - Comportamiento Quemable