Proyecto de token TypeScript andamio 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 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 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 no fungible fraccional.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 de 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 realizar 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 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
-
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 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 eliminarse a sí mismo 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 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 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 ([]
). Si es el usuario que ha desplegado 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 cadena. 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 el rol minter no está definido, cualquier usuario puede utilizar este método para crear NFT (de menta). El usuario que llama a este método se convierte en el propietario de la NFT. -
update<Token Name>Token
- Este método actualiza los 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 tokens fungibles, este método solo puede ser llamado por un
Token Admin
del código de cadena. Para 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 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 NFT fraccionales, 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 puede ser llamado por un
Token Admin
del código de cadenas o por 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. El ID de token especifica los tokens fungibles. 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 minados menos el número de tokens quemados. El ID de token especifica los tokens fungibles. 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 posiciones 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 de las cuentas de token fungibles que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con el token. Este método solo puede ser llamado por un
Token Admin
del código de cadena.Una cuenta de usuario tiene un ID único, que está 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 de constanteft
separada por el símbolo de tilde (~
) y un número de contador que indica el índice de la cuenta fungible que se está creando separado por el símbolo de 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 de constantenft
separados por el símbolo de tilde (~
). Todos los tokens no fungibles que un usuario posee, ya sean enteros o fraccionarios, están enlazados 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 de NFT y de las cuentas de token fungibles que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con el token.
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 ID de cuenta de token fungible están formados por un hash SHA-256 del parámetro
orgId
, el parámetrouserId
, la cadena de constanteft
separada por el símbolo de tilde (~
) y un número de contador que indica el índice de la cuenta fungible que se está creando separado por el símbolo de 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 de constantenft
separados por el símbolo de tilde (~
). Todos los tokens no fungibles que un usuario posee, ya sean enteros o fraccionarios, están enlazados 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 concreto.
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. Se trata de un método asíncrono. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o por el propietario de la cuenta. -
getAccount
- Este método devuelve detalles de 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 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. Cualquier usuario puede llamar a este método.
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. El ID de token especifica los tokens fungibles. Los tokens no fungibles se especifican mediante el nombre del token. El usuario especificado debe tener una cuenta de token 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. El ID de token especifica los tokens fungibles. 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 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. El ID de token especifica los tokens fungibles. 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 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. El ID de token especifica los tokens fungibles. 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. El ID de token especifica los tokens fungibles. 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 puede ser llamado por un
Token Admin
del código de cadenas o por el propietario de la cuenta. Para 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 transacción de 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 de los tokens: comportamiento de Mintable
-
mintBatch
- Este método crea (mintiza) varios tokens en una operación por lotes. Este método crea solo tokens fungibles o tokens no fungibles fraccionarios.
Para 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 importar más de la propiedad
max_mint_quantity
del token si esa propiedad se especificó al crear o actualizar el token.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. 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 un límite superior para la cantidad de tokens no fungibles fraccionarios 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 los tokens: comportamiento transferible
-
batchTransferFrom
- Este método finaliza una operación por lotes que transfiere tokens especificados en una lista de ID de token de un usuario a otro usuario.
En el caso de las NFT, dado que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser propietario del token.
En el caso de NFT fraccionarios, si un usuario (incluido el creador del token) transfiere todos los recursos compartidos que posee, perderá la propiedad del token. Si alguna 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 del método sea el remitente especificado. Cualquier usuario puede llamar a este método.
-
safeBatchTransferFrom
- Este método finaliza una operación por lotes que transfiere tokens especificados en una lista de ID de token de un usuario a otro usuario.
En el caso de las NFT, dado que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser propietario del token.
En el caso de NFT fraccionarios, si un usuario (incluido el creador del token) transfiere todos los recursos compartidos que posee, perderá la propiedad del token. Si alguna 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. Cualquier usuario puede llamar a este método.
-
balanceOfBatch
- Este método finaliza una operación por lotes que obtiene el saldo de cuentas de token. Los detalles de la cuenta se especifican en tres listas independientes de ID de organización, ID de usuario e ID de token. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o por propietarios de cuentas. 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. El NFT puede ser completo o fraccional. Solo el propietario de la cuenta puede llamar a este método.
Métodos para la gestión del comportamiento de los tokens: comportamiento que se puede quemar
-
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 graba 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 del 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. Esta 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 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 a sí mismo comoToken Admin
. -
getAllAdmins
- Este método devuelve una lista de todos los usuarios
Token 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 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 NFT (de menta). El usuario que llama a este método se convierte en el propietario de la NFT (total o fraccional).
-
update
- Este método actualiza los 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 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. El ID de token especifica los tokens fungibles. Los tokens no fungibles se especifican mediante el nombre del token.
-
totalNetSupply
- Este método devuelve el número total de tokens minados menos el número de tokens quemados. El ID de token especifica los tokens fungibles. 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 posiciones decimales para un token especificado. Si no se especifica el comportamiento divisible para el token, se devuelve el valor por defecto 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 de las cuentas de token fungibles que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con el token. Este método solo puede ser llamado por un
Token Admin
del código de cadena.Una cuenta de usuario tiene un ID único, que está 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 de constanteft
separada por el símbolo de tilde (~
) y un número de contador que indica el índice de la cuenta fungible que se está creando separado por el símbolo de 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 de constantenft
separados por el símbolo de tilde (~
). Todos los tokens no fungibles que posee un usuario, ya sean enteros o fraccionarios, 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 de NFT y de las cuentas de token fungibles que tiene un usuario. Los usuarios deben tener cuentas en la red para completar las operaciones relacionadas con el token.
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 ID de cuenta de token fungible están formados por un hash SHA-256 del parámetro
orgId
, el parámetrouserId
, la cadena de constanteft
separada por el símbolo de tilde (~
) y un número de contador que indica el índice de la cuenta fungible que se está creando separado por el símbolo de 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 de constantenft
separados por el símbolo de tilde (~
). Todos los tokens no fungibles que posee un usuario, ya sean enteros o fraccionarios, están enlazados 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 concreto.
-
getAccountHistory
- Este método devuelve el historial de una cuenta de token especificada.
-
getAccountWithStatus
- Este método devuelve detalles de cuenta de token, incluido el estado de 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 detalles de 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 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. El ID de token especifica los tokens fungibles. 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. El ID de token especifica los tokens fungibles. Los tokens no fungibles se especifican mediante el nombre del token.
-
removeRoleMember
- Este método elimina un rol de un usuario y token especificados. El ID de token especifica los tokens fungibles. 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. El ID de token especifica los tokens fungibles. 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. El ID de token especifica los tokens fungibles. 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 puede ser llamado por un
Token Admin
del código de cadenas o por el propietario de la cuenta. Para 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 transacción de 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 de los tokens: comportamiento de Mintable
-
mintBatch
- Este método crea (mintiza) varios tokens en una operación por lotes. Este método crea solo tokens fungibles o tokens no fungibles fraccionarios.
Para 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 importar más de la propiedad
max_mint_quantity
del token si esa propiedad se especificó al crear o actualizar el token.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. 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 un límite superior para la cantidad de tokens no fungibles fraccionarios 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 los tokens: comportamiento transferible
-
batchTransferFrom
- Este método finaliza una operación por lotes que transfiere tokens especificados en una lista de ID de token de un usuario a otro usuario.
En el caso de las NFT, dado que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser propietario del token.
En el caso de NFT fraccionarios, si un usuario (incluido el creador del token) transfiere todos los recursos compartidos que posee, perderá la propiedad del token. Si alguna 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 del método sea el remitente especificado.
-
safeBatchtransferFrom
- Este método finaliza una operación por lotes que transfiere tokens especificados en una lista de ID de token de un usuario a otro usuario.
En el caso de las NFT, dado que el método transfiere la propiedad de la NFT, el remitente de la NFT debe ser propietario del token.
En el caso de NFT fraccionarios, si un usuario (incluido el creador del token) transfiere todos los recursos compartidos que posee, perderá la propiedad del token. Si alguna 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 finaliza una operación por lotes que obtiene el saldo de cuentas de token. Los detalles de la cuenta se especifican en tres listas independientes de ID de organización, ID de usuario e ID de token. Este método solo puede ser llamado por un
Token Admin
del código de cadenas o por propietarios de cuentas. 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 (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 los tokens: comportamiento que se puede quemar