Projeto de Token TypeScript do Andaime para ERC-1155
O Blockchain App Builder pega a entrada do seu arquivo de especificação de token e gera um projeto de chaincode com andaimes 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 suportados automaticamente.
Para obter informações sobre o projeto andaime e os métodos que não estão diretamente relacionados aos tokens, consulte Projeto Chaincode do TypeScript Andaime.
Modelo
Cada classe de modelo tokenizada estende a classe OchainModel
. O Recurso de Persistência Transparente, ou ORM simplificado, é capturado na classe OchainModel
. O modelo a seguir mostra um token não fungível inteiro.
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 não fungível fracionário.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 que são definidos dentro da classe do controlador principal são invocáveis. Os outros métodos estão ocultos.
Você pode usar os métodos SDK de token para criar 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 de Gerenciamento de Controle de Acesso
-
isTokenAdmin
- Esse método retornará o valor booliano
true
se o chamador da função forToken Admin
; caso contrário, retornaráfalse
. Este método só pode ser chamado por umToken Admin
do chaincode. -
addTokenAdmin
- Esse método adiciona um usuário como um
Token Admin
do chaincode. Este 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. Este método só pode ser chamado por umToken Admin
do chaincode. Você não pode remover-se comoToken Admin
. -
getAllTokenAdmins
- Esse método retorna uma lista de todos os usuários que são um
Token Admin
do chaincode. Este método só pode ser chamado por umToken Admin
do chaincode.
Métodos de Gerenciamento de Configuração de Token
-
init
- Esse método é chamado quando o chaincode é instanciado. Cada
Token Admin
é identificado pelas informaçõesuserId
eorgId
no parâmetroadminList
.userId
é 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
ao fazer upgrade do chaincode. Qualquer outra informação no parâmetroadminList
é 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 minter for definida no arquivo de especificação, qualquer usuário com a função minter poderá chamar esse método para criar um NFT. Se a função de minerador 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. Não é possível 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 salvos no banco de dados de estado. Este método só pode ser chamado por um
Token Admin
do chaincode. Esse método usa consultas avançadas do Berkeley DB SQL e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
getTokenById
- Esse método retornará um objeto de token se o token estiver presente no banco de dados de estado. Para NFTs fracionários, a lista de proprietários também é retornada. Esse método só pode ser chamado por um
Token Admin
do chaincode ou do proprietário do token. -
getAllTokensByUser
- Este método retorna todos os ativos de token pertencentes a um usuário especificado. Esse método usa consultas avançadas do Berkeley DB SQL 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
- Esse 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
- Esse 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. Tokens não fungíveis são especificados pelo nome do token. Este 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. Tokens não fungíveis são especificados pelo nome do token. Este método só pode ser chamado por um
Token Admin
do chaincode. -
getTokensByName
- Esse método retorna todos os ativos de token para um nome de token especificado. Esse método usa consultas avançadas do Berkeley DB SQL e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. Este método só pode ser chamado por um
Token Admin
do chaincode. -
getTokenDecimal
- Esse método retorna o número de casas decimais para um token especificado. Este método só pode ser chamado por um
Token Admin
do chaincode.
Métodos de Gerenciamento de Conta
-
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. Uma conta deve ser criada 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. Este método só pode ser chamado por um
Token Admin
do chaincode.Uma conta de usuário tem um ID exclusivo, que é 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 de conta de 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 de til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo de 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 de 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 de usuário começam com
ouaccount~
. Os IDs de conta de token começam comoaccount~
. -
createUserAccount
- Este método cria uma conta para um usuário especificado. Uma conta deve ser criada 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 tem. 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
. Este 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 de conta de 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 de til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo de 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 de til (~
). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a esta conta.Este método só pode ser chamado por um
Token Admin
do chaincode. -
associateFungibleTokenAccount
- Esse método associa a conta de token fungível de um usuário a um token fungível específico.
Este 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 os detalhes da conta de token de 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. Este 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 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. Esse método pode ser chamado por qualquer usuário.
Métodos de Gerenciamento de Atribuições
-
addRole
- Esse método adiciona uma atribuição a um usuário e token especificados. Este método só pode ser chamado por um
Token Admin
do chaincode. Os tokens fungíveis são especificados pelo ID do token. 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 para o 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. 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 para o token. -
removeRole
- Esse método remove uma atribuição de um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. Tokens não fungíveis são especificados pelo nome do token. Este 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 para o token. -
getAccountsByRole
- Esse método retorna uma lista de todos os IDs de conta para uma função e um token especificados. Os tokens fungíveis são especificados pelo ID do token. Tokens não fungíveis são especificados pelo nome do token. Este método só pode ser chamado por um
Token Admin
do chaincode. -
getUsersByRole
- Esse método retorna uma lista de todos os usuários de uma atribuição e token especificados. Os tokens fungíveis são especificados pelo ID do token. Tokens não fungíveis são especificados pelo nome do token. Este método só pode ser chamado por um
Token Admin
do chaincode.
Métodos do 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. Este método só pode ser chamado por um
Token Admin
do chaincode.
Métodos do Gerenciamento de Comportamento de Token - Comportamento Mintable
-
mintBatch
- Este método cria (monta) vários tokens em uma operação em lote. Este método cria apenas tokens fungíveis ou tokens não fungíveis fracionários.
Para tokens fungíveis, se a função minter for definida no arquivo de especificação, qualquer usuário com a função minter poderá chamar esse método. Caso contrário, qualquer usuário poderá usar esse método para criar tokens. Você não pode cunhar 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 minter for definida no arquivo de especificação, qualquer usuário com a função minter poderá chamar esse método. Caso contrário, qualquer usuário poderá usar esse método para criar tokens. Além disso, o chamador também deve ser o criador do token. Não há limite superior para a quantidade de tokens não fungíveis fracionários que podem ser cunhados.
Você não pode usar esse método para cunhar um token não fungível inteiro.
Métodos do Gerenciamento de Comportamento de Token - Comportamento Transferível
-
batchTransferFrom
- Este método conclui uma operação em lote 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 todas as ações 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. Esse método pode ser chamado por qualquer usuário.
-
safeBatchTransferFrom
- Este método conclui uma operação em lote 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 todas as ações 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. Esse método pode ser chamado por qualquer usuário.
-
balanceOfBatch
- Este método conclui uma operação em lote que obtém o saldo das contas de token. Os detalhes da conta são especificados em três listas separadas de IDs da organização, IDs de usuário e IDs de 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 que possuem. -
exchangeToken
- Este método troca tokens entre contas especificadas. Este método só suporta 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 de 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 gravador pode chamar esse método.
-
burnNFT
- Esse 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 gravador 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 de Gerenciamento de Controle de Acesso
-
checkAuthorization
- Use esse 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 do 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 de controlador gerados automaticamente e 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
- Esse método retornará o valor Booliano
true
se o usuário especificado forToken Admin
e, caso contrário,false
. 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 chaincode 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
Token Admin
do chaincode do token. O método só pode ser chamado por umToken Admin
do chaincode do token. Você não pode remover-se comoToken Admin
. -
getAllAdmins
- Esse método retorna uma lista de todos os usuários
Token Admin
.
Métodos de 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 minter for definida no arquivo de especificação, qualquer usuário com a função minter poderá chamar esse método para criar um NFT. Caso contrário, qualquer usuário poderá usar esse método para criar (mint) NFTs. O usuário que chama esse método se torna o proprietário do NFT (inteiro ou fracional).
-
update
- Este método atualiza tokens. Não é possível 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 salvos no banco de dados de estado. Este método só pode ser chamado por um
Token Admin
do chaincode. Esse método usa consultas avançadas do Berkeley DB SQL e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
get (Token)
- Esse método retornará 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 do proprietário do token. -
getAllTokensByUser
- Este método retorna todos os ativos de token pertencentes a um usuário especificado. Esse método usa consultas avançadas do Berkeley DB SQL e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
-
ownerOf
- Esse 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
- Esse 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. 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. Tokens não fungíveis são especificados pelo nome do token.
-
getTokensByName
- Esse método retorna todos os ativos de token para um nome de token especificado. Esse método usa consultas avançadas do Berkeley DB SQL e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
-
getDecimals
- Esse 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 de Gerenciamento de Conta
-
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. Uma conta deve ser criada 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 tem. Os usuários devem ter contas na rede para concluir operações relacionadas a token. Este método só pode ser chamado por um
Token Admin
do chaincode.Uma conta de usuário tem um ID exclusivo, que é 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 de conta de 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 de til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo de 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 de 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. Uma conta deve ser criada 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 tem. 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
. Este 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 de conta de 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 de til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo de 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 de 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.Este método só pode ser chamado por um
Token Admin
do chaincode. -
associateTokenToToken
- Esse 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 os detalhes da conta de token de 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 associados ao usuário.
-
getUserByAccountId
- Este método retorna os detalhes do usuário de um ID de conta especificado.
Métodos de Gerenciamento de Atribuições
-
AddRoleMember
- Esse método adiciona uma atribuição a um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. 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. Tokens não fungíveis são especificados pelo nome do token.
-
removeRoleMember
- Esse método remove uma atribuição de um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. Tokens não fungíveis são especificados pelo nome do token.
-
getAccountsByRole
- Esse método retorna uma lista de todos os IDs de conta para uma função e um token especificados. Os tokens fungíveis são especificados pelo ID do token. Tokens não fungíveis são especificados pelo nome do token.
-
getUsersByRole
- Esse método retorna uma lista de todos os usuários de uma atribuição e token especificados. Os tokens fungíveis são especificados pelo ID do token. Tokens não fungíveis são especificados pelo nome do token.
Métodos do 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 do Gerenciamento de Comportamento de Token - Comportamento Mintable
-
mintBatch
- Este método cria (monta) vários tokens em uma operação em lote. Este método cria apenas tokens fungíveis ou tokens não fungíveis fracionários.
Para tokens fungíveis, se a função minter for definida no arquivo de especificação, qualquer usuário com a função minter poderá chamar esse método. Caso contrário, qualquer usuário poderá usar esse método para criar tokens. Você não pode cunhar 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 minter for definida no arquivo de especificação, qualquer usuário com a função minter poderá chamar esse método. Caso contrário, qualquer usuário poderá usar esse método para criar tokens. Além disso, o chamador também deve ser o criador do token. Não há limite superior para a quantidade de tokens não fungíveis fracionários que podem ser cunhados.
Você não pode usar esse método para cunhar um token não fungível inteiro.
Métodos do Gerenciamento de Comportamento de Token - Comportamento Transferível
-
batchTransferFrom
- Este método conclui uma operação em lote 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 todas as ações 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 lote 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 todas as ações 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 das contas de token. Os detalhes da conta são especificados em três listas separadas de IDs da organização, IDs de usuário e IDs de 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 que possuem. -
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 de Gerenciamento de Comportamento de Token - Comportamento Queimável