Projeto de Token Scaffolded TypeScript para ERC-1155
O Blockchain App Builder pega a entrada do seu arquivo de especificação de token e gera um projeto de chaincode scaffolded totalmente funcional.
O projeto gera automaticamente classes e funções de ciclo de vida de token, incluindo métodos CRUD e não CRUD. Validação de argumentos, marshalling/unmarshalling, e capacidade de persistência transparente são todos suportados automaticamente.
Para obter informações sobre o projeto e os métodos scaffolded que não estão diretamente relacionados a tokens, consulte Projeto Chaincode TypeScript andaime.
Modelo
Cada classe de modelo tokenizado estende a classe OchainModel
. O Recurso de Persistência Transparente, ou ORM simplificado, é capturado na classe OchainModel
. O modelo a seguir mostra um token inteiro não fungível.
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;
}
O modelo a seguir mostra um token fracionário não fungível.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;
}
Controladora
A classe do controlador principal estende a classe OchainController
. Há apenas um controlador principal.
export class DigiCurrCCController extends OchainController{
Você pode criar qualquer número de classes, funções ou arquivos, mas apenas os métodos definidos na classe do controlador principal são invocáveis. Os outros métodos estão ocultos.
Você pode usar os métodos do token SDK para gravar métodos personalizados para seu aplicativo de negócios.
Métodos de Token Gerados Automaticamente
O Blockchain App Builder gera automaticamente métodos para suportar tokens e ciclos de vida de token. Você pode usar esses métodos para inicializar tokens, gerenciar atribuições e contas e concluir outras tarefas de ciclo de vida de token sem qualquer codificação adicional. Os métodos da controladora devem ter um decorador @Validator(...params)
para serem chamados.
- Gerenciamento de Controle de Acesso
- Gerenciamento de Configuração de Token
- Gerenciamento de Contas
- Gerenciamento de Atribuições
- Gerenciamento do Histórico de Transações
- Gerenciamento de Comportamento de Token
Métodos para Gerenciamento de Controle de Acesso
-
isTokenAdmin
- Este método retornará o valor Booliano
true
se o chamador da função for umToken Admin
, caso contrário, retornaráfalse
. Esse método só pode ser chamado por umToken Admin
do chaincode. -
addTokenAdmin
- Este método adiciona um usuário como um
Token Admin
do chaincode. Esse método só pode ser chamado por umToken Admin
do chaincode. -
removeTokenAdmin
- Este método remove um usuário como um
Token Admin
do chaincode. Esse método só pode ser chamado por umToken Admin
do chaincode. Você não pode se remover como umToken Admin
. -
getAllTokenAdmins
- Este método retorna uma lista de todos os usuários que são um
Token Admin
do chaincode. Esse método só pode ser chamado por umToken Admin
do chaincode.
Métodos para Gerenciamento de Configuração de Token
-
init
- Esse método é chamado quando o chaincode é instanciado. Todo
Token Admin
é identificado pelas informaçõesuserId
eorgId
no parâmetroadminList
. OuserId
é o nome de usuário ou o ID de e-mail do proprietário da instância ou do usuário que está conectado à instância. OorgId
é o ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual. O parâmetroadminList
é obrigatório na primeira vez que você implanta o chaincode. Se você estiver fazendo upgrade do chaincode, informe uma lista vazia ([]
). Se você for o usuário que implantou inicialmente o chaincode, também poderá especificar novos administradores no parâmetroadminList
quando estiver fazendo upgrade do chaincode. Qualquer outra informação no parâmetroadminList
será ignorada durante os upgrades. -
create<Token Name>Token
- Este método cria tokens. Cada token definido tem seu próprio método de criação. Para tokens fungíveis, esse método só pode ser chamado por um
Token Admin
do chaincode. Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método para criar um NFT. Se a função de minter não estiver definida, qualquer usuário poderá usar esse método para criar NFTs (mint). O usuário que chama esse método se torna o proprietário do NFT. -
update<Token Name>Token
- Este método atualiza tokens. Cada token definido tem seu próprio método de atualização. Você não pode atualizar metadados de token ou o URI de token de tokens não fungíveis. Para tokens fungíveis, esse método só pode ser chamado por um
Token Admin
do chaincode. Para tokens não fungíveis, esse método só pode ser chamado pelo proprietário do token. -
getTokenHistory
- Este método retorna o histórico de um ID de token especificado. Qualquer um pode chamar esse método.
-
getAllTokens
- Este método retorna todos os ativos de token que são salvos no banco de dados de estado. Esse método só pode ser chamado por um
Token Admin
do chaincode. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
getTokenById
- Este método retorna um objeto de token se o token estiver presente no banco de dados de estado. Para NFTs fracionais, a lista de proprietários também é retornada. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário do token. -
getAllTokensByUser
- Este método retorna todos os ativos de token pertencentes a um usuário especificado. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário da conta. -
ownerOf
- Este método retorna o ID da conta, o ID da organização e o ID do usuário do proprietário do ID do token especificado. Qualquer um pode chamar esse método.
-
URI
- Este método retorna o URI de um token especificado. Qualquer um pode chamar esse método.
-
name
- Este método retorna o nome da classe de token. Qualquer um pode chamar esse método.
-
totalSupply
- Este método retorna o número total de tokens cunhados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um
Token Admin
do chaincode. -
totalNetSupply
- Este método retorna o número total de tokens cunhados menos o número de tokens gravados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um
Token Admin
do chaincode. -
getTokensByName
- Este método retorna todos os ativos de token para um nome de token especificado. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. Esse método só pode ser chamado por um
Token Admin
do chaincode. -
getTokenDecimal
- Este método retorna o número de casas decimais para um token especificado. Esse método só pode ser chamado por um
Token Admin
do chaincode.
Métodos para Gerenciamento de Contas
-
createAccount
- Este método cria uma conta para um usuário especificado e contas de token associadas para tokens fungíveis ou não fungíveis. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário mantém. Os usuários devem ter contas na rede para concluir operações relacionadas a token. Esse método só pode ser chamado por um
Token Admin
do chaincode.Uma conta de usuário tem um ID exclusivo, formado por um hash SHA-256 do parâmetro
orgId
e do parâmetrouserId
.Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro
orgId
, o parâmetrouserId
, a string constanteft
separada pelo símbolo til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~
).Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro
orgId
, do parâmetrouserId
e da string constantenft
separada pelo símbolo til (~
). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a esta conta.Os IDs de conta do usuário começam com
ouaccount~
. Os IDs da conta de token começam comoaccount~
. -
createUserAccount
- Este método cria uma conta para um usuário especificado. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário possui. Os usuários devem ter contas na rede para concluir operações relacionadas a token.
ID da conta é um hash SHA-256 do parâmetro
orgId
e do parâmetrouserId
. Esse método só pode ser chamado por umToken Admin
do chaincode. -
createTokenAccount
- Este método cria uma conta de token fungível ou não fungível para associar a uma conta de usuário.
Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro
orgId
, o parâmetrouserId
, a string constanteft
separada pelo símbolo til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~
).Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro
orgId
, do parâmetrouserId
e da string constantenft
separada pelo símbolo til (~
). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a esta conta.Esse método só pode ser chamado por um
Token Admin
do chaincode. -
associateFungibleTokenAccount
- Este método associa a conta de token fungível de um usuário a um token fungível específico.
Esse método só pode ser chamado por um
Token Admin
do chaincode. -
getAccountHistory
- Este método retorna o histórico de uma conta de token especificada. Este é um método assíncrono. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário da conta. -
getAccount
- Este método retorna detalhes da conta de token para um usuário especificado. Esse método só pode ser chamado por um
Token Admin
do chaincode ou peloAccount Owner
da conta. -
getAllAccounts
- Este método retorna detalhes de todas as contas de usuário. Esse método só pode ser chamado por um
Token Admin
do chaincode. -
getAccountDetailsByUser
- Este método retorna um resumo de conta para um usuário especificado e detalhes de tokens fungíveis e não fungíveis que estão associados ao usuário. Esse método só pode ser chamado por um
Token Admin
do chaincode ou peloAccount Owner
da conta. -
getUserByAccountId
- Este método retorna os detalhes do usuário de um ID de conta especificado. Este método pode ser chamado por qualquer usuário.
Métodos para Gerenciamento de Atribuições
-
addRole
- Este método adiciona uma atribuição a um usuário e token especificados. Esse método só pode ser chamado por um
Token Admin
do chaincode. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. O usuário especificado deve ter uma conta de token associada ao token fungível ou uma conta de token não fungível para atribuições NFT. A atribuição especificada deve existir no arquivo de especificação do token. -
isInRole
- Este método retorna um valor booliano para indicar se um usuário tem uma função especificada. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um
Token Admin
do chaincode ou peloAccount Owner
da conta. O usuário especificado deve ter uma conta de token associada ao token fungível ou uma conta de token não fungível para atribuições NFT. A atribuição especificada deve existir no arquivo de especificação do token. -
removeRole
- Este método remove uma atribuição de um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um
Token Admin
do chaincode. O usuário especificado deve ter uma conta de token associada ao token fungível ou uma conta de token não fungível para atribuições NFT. A atribuição especificada deve existir no arquivo de especificação do token. -
getAccountsByRole
- Este método retorna uma lista de todos os IDs de conta para uma função e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um
Token Admin
do chaincode. -
getUsersByRole
- Este método retorna uma lista de todos os usuários para uma atribuição e um token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um
Token Admin
do chaincode.
Métodos para Gerenciamento do Histórico de Transações
-
getAccountTransactionHistory
- Este método retorna o histórico de transações da conta. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário da conta. Para tokens não fungíveis, esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
getTransactionById
- Este método retorna os detalhes da transação para um ID de transação especificado. Qualquer um pode chamar esse método.
-
deleteHistoricalTransactions
- Este método exclui transações antes de um timestamp especificado do banco de dados de estado. Esse método só pode ser chamado por um
Token Admin
do chaincode.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Mintable
-
mintBatch
- Este método cria (mints) vários tokens em uma operação em batch. Este método cria apenas tokens fungíveis ou tokens fracionários não fungíveis.
Para tokens fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Você não poderá usar mais do que a propriedade
max_mint_quantity
do token se essa propriedade tiver sido especificada quando o token foi criado ou atualizado.Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Além disso, o chamador também deve ser o criador do token. Não há limite superior para a quantidade de tokens fracionários não fungíveis que podem ser cunhados.
Você não pode usar este método para cunhar um token inteiro não fungível.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Transferível
-
batchTransferFrom
- Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.
Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.
Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.
Este método não valida se o chamador do método é o remetente especificado. Este método pode ser chamado por qualquer usuário.
-
safeBatchTransferFrom
- Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.
Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.
Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.
O chamador do método deve ser o remetente especificado. Este método pode ser chamado por qualquer usuário.
-
balanceOfBatch
- Este método conclui uma operação em lote que obtém o saldo de contas de token. Os detalhes da conta são especificados em três listas separadas de IDs da organização, IDs usuário e IDs token. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelos proprietários da conta. Os proprietários da conta só podem ver os detalhes do saldo das contas de sua propriedade. -
exchangeToken
- Este método troca tokens entre contas especificadas. Este método suporta apenas a troca entre um NFT e um token fungível ou um token fungível e um NFT. O NFT pode ser inteiro ou fracionário. Esse método só pode ser chamado pelo proprietário da conta.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Queimável
-
burnBatch
- Este método desativa ou queima os tokens fungíveis e não fungíveis especificados. Qualquer usuário com a função de queimador pode chamar esse método.
-
burnNFT
- Este método desativa ou grava o token não fungível especificado e retorna um objeto de token e um histórico de token. Qualquer usuário com a função de queimador pode chamar esse método.
Métodos SDK
- Gerenciamento de Controle de Acesso
- Gerenciamento de Configuração de Token
- Gerenciamento de Contas
- Gerenciamento de Atribuições
- Gerenciamento do Histórico de Transações
- Gerenciamento de Comportamento de Token
Métodos para Gerenciamento de Controle de Acesso
-
isUserTokenAdmin
- Este método retornará o valor Booliano
true
se o usuário especificado for umToken Admin
efalse
caso contrário. O método só pode ser chamado por umToken Admin
do chaincode do token. -
addAdmin
- Esse método adiciona um usuário como
Token Admin
do código de cadeia do token. O método só pode ser chamado por umToken Admin
do chaincode do token. -
removeAdmin
- Esse método remove um usuário como um
Token Admin
do chaincode do token. O método só pode ser chamado por umToken Admin
do chaincode do token. Você não pode se remover como umToken Admin
. -
getAllAdmins
- Esse método retorna uma lista de todos os usuários do
Token Admin
. -
checkAuthorization
- Use este método para adicionar uma verificação de controle de acesso a uma operação. Esta é uma função assíncrona. Determinados métodos de token só podem ser executados pelo
Token Admin
ouAccountOwner
do token ou peloMultipleAccountOwner
para usuários com várias contas. O mapeamento de controle de acesso é descrito no arquivo../lib/constant.ts
. Você pode modificar o controle de acesso editando o arquivo../lib/constant.ts
. Para usar seu próprio controle de acesso ou desativar o controle de acesso, remova o código de controle de acesso dos métodos do controlador gerados automaticamente e dos 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"], },
Métodos para Gerenciamento de Configuração de Token
-
save
- Este método cria tokens. Cada token definido tem seu próprio método de criação. Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método para criar um NFT. Caso contrário, qualquer usuário poderá usar esse método para criar NFTs (mint). O usuário que chama esse método se torna o proprietário do NFT (inteiro ou fracionário).
-
update
- Este método atualiza tokens. Você não pode atualizar metadados de token ou o URI de token de tokens não fungíveis.
-
history (Token)
- Este método retorna o histórico de um ID de token especificado.
-
getAllTokens
- Este método retorna todos os ativos de token que são salvos no banco de dados de estado. Esse método só pode ser chamado por um
Token Admin
do chaincode. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
get (Token)
- Este método retorna um objeto de token se o token estiver presente no banco de dados de estado. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário do token. -
getAllTokensByUser
- Este método retorna todos os ativos de token pertencentes a um usuário especificado. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
-
ownerOf
- Este método retorna o ID da conta, o ID da organização e o ID do usuário do proprietário do ID do token especificado.
-
tokenURI
- Este método retorna o URI de um token especificado. Qualquer um pode chamar esse método.
-
name
- Este método retorna o nome da classe de token. Qualquer um pode chamar esse método.
-
totalSupply
- Este método retorna o número total de tokens cunhados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
totalNetSupply
- Este método retorna o número total de tokens cunhados menos o número de tokens gravados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
getTokensByName
- Este método retorna todos os ativos de token para um nome de token especificado. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
-
getDecimals
- Este método retorna o número de casas decimais para um token especificado. Se o comportamento divisível não for especificado para o token, o valor padrão de zero casas decimais será retornado.
Métodos para Gerenciamento de Contas
-
createAccount
- Este método cria uma conta para um usuário especificado e contas de token associadas para tokens fungíveis ou não fungíveis. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário possui. Os usuários devem ter contas na rede para concluir operações relacionadas a token. Esse método só pode ser chamado por um
Token Admin
do chaincode.Uma conta de usuário tem um ID exclusivo, formado por um hash SHA-256 do parâmetro
orgId
e do parâmetrouserId
.Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro
orgId
, o parâmetrouserId
, a string constanteft
separada pelo símbolo til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~
).Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro
orgId
, do parâmetrouserId
e da string constantenft
separada pelo símbolo til (~
). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a essa única conta de token não fungível. -
createUserAccount
- Este método cria uma conta para um usuário especificado. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário possui. Os usuários devem ter contas na rede para concluir operações relacionadas a token.
Um ID de conta é um hash SHA-256 do parâmetro
orgId
e do parâmetrouserId
. Esse método só pode ser chamado por umToken Admin
do chaincode. -
createTokenAccount
- Este método cria uma conta de token fungível ou não fungível para associar a uma conta de usuário.
Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro
orgId
, o parâmetrouserId
, a string constanteft
separada pelo símbolo til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~
).Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro
orgId
, do parâmetrouserId
e da string constantenft
separada pelo símbolo til (~
). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a essa única conta de token não fungível.Esse método só pode ser chamado por um
Token Admin
do chaincode. -
associateTokenToToken
- Este método associa a conta de token fungível de um usuário a um token fungível específico.
-
getAccountHistory
- Este método retorna o histórico de uma conta de token especificada.
-
getAccountWithStatus
- Este método retorna detalhes da conta de token, incluindo o status da conta, para um usuário especificado. Esse método só pode ser chamado por um
Token Admin
do chaincode ou peloAccount Owner
da conta. -
getAccount
- Este método retorna detalhes da conta de token para um usuário especificado. Esse método só pode ser chamado por um
Token Admin
do chaincode ou peloAccount Owner
da conta. -
getAllAccounts
- Este método retorna detalhes de todas as contas de usuário.
-
getAccountDetailsByUser
- Este método retorna um resumo de conta para um usuário especificado e detalhes de tokens fungíveis e não fungíveis que estão associados ao usuário.
-
getUserByAccountId
- Este método retorna os detalhes do usuário de um ID de conta especificado.
Métodos para Gerenciamento de Atribuições
-
AddRoleMember
- Este método adiciona uma atribuição a um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
isInRole
- Este método retorna um valor booliano para indicar se um usuário tem uma função especificada. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
removeRoleMember
- Este método remove uma atribuição de um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
getAccountsByRole
- Este método retorna uma lista de todos os IDs de conta para uma função e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
getUsersByRole
- Este método retorna uma lista de todos os usuários para uma atribuição e um token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
Métodos para Gerenciamento do Histórico de Transações
-
getAccountTransactionHistory
- Este método retorna o histórico de transações da conta. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário da conta. Para tokens não fungíveis, esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
getTransactionById
- Este método retorna os detalhes da transação para um ID de transação especificado.
-
deleteTransactions
- Este método exclui transações antes de um timestamp especificado do banco de dados de estado.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Mintable
-
mintBatch
- Este método cria (mints) vários tokens em uma operação em batch. Este método cria apenas tokens fungíveis ou tokens fracionários não fungíveis.
Para tokens fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Você não poderá usar mais do que a propriedade
max_mint_quantity
do token se essa propriedade tiver sido especificada quando o token foi criado ou atualizado.Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Além disso, o chamador também deve ser o criador do token. Não há limite superior para a quantidade de tokens fracionários não fungíveis que podem ser cunhados.
Você não pode usar este método para cunhar um token inteiro não fungível.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Transferível
-
batchTransferFrom
- Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.
Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.
Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.
Este método não valida se o chamador do método é o remetente especificado.
-
safeBatchtransferFrom
- Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.
Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.
Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.
O chamador do método deve ser o remetente especificado.
-
balanceOfBatch
- Este método conclui uma operação em lote que obtém o saldo de contas de token. Os detalhes da conta são especificados em três listas separadas de IDs da organização, IDs usuário e IDs token. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelos proprietários da conta. Os proprietários da conta só podem ver os detalhes do saldo das contas de sua propriedade. -
exchangeToken
- Este método troca tokens entre contas especificadas. Este método suporta apenas a troca entre um NFT (inteiro ou fracionário) e um token fungível ou um token fungível e um NFT (inteiro ou fracionário). Esse método só pode ser chamado pelo proprietário da conta.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Queimável