Projeto Scaffolded Go NFT para ERC-721
O Blockchain App Builder pega a entrada do seu arquivo de especificação NFT e gera um projeto de chaincode totalmente funcional.
O projeto gera automaticamente classes e funções de ciclo de vida NFT, 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 e os métodos do andaime que não estão diretamente relacionados aos NFTs, consulte Projeto do Chaincode do andaime Go.
Modelo
O Recurso de Persistência Transparente, ou ORM simplificado, é capturado na classe OchainModel
.
package model
type ArtCollection struct {
AssetType string `json:"AssetType" final:"otoken"`
TokenId string `json:"TokenId" id:"true" mandatory:"true" validate:"regexp=^[A-Za-z0-9][A-Za-z0-9_-]*$,max=16"`
TokenName string `json:"TokenName" final:"artcollection"`
TokenDesc string `json:"TokenDesc" validate:"max=256"`
Symbol string `json:"Symbol" final:"ART"`
TokenStandard string `json:"TokenStandard" final:"erc721+"`
TokenType string `json:"TokenType" final:"nonfungible" validate:"regexp=^nonfungible$"`
TokenUnit string `json:"TokenUnit" final:"whole" validate:"regexp=^whole$"`
Behavior []string `json:"Behavior" final:"[\"indivisible\",\"singleton\",\"mintable\",\"transferable\",\"burnable\",\"roles\"]"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":20000}"`
Owner string `json:"Owner,omitempty" validate:"string"`
CreatedBy string `json:"CreatedBy,omitempty" validate:"string"`
TransferredBy string `json:"TransferredBy,omitempty" validate:"string"`
CreationDate string `json:"CreationDate,omitempty" validate:"string"`
TransferredDate string `json:"TransferredDate,omitempty" validate:"string"`
IsBurned bool `json:"IsBurned" validate:"bool"`
BurnedBy string `json:"BurnedBy,omitempty" validate:"string"`
BurnedDate string `json:"BurnedDate,omitempty" validate:"string"`
TokenUri string `json:"TokenUri" validate:"string,max=2000"`
TokenMetadata ArtCollectionMetadata `json:"TokenMetadata"`
Price int `json:"Price" validate:"int"`
On_sale_flag bool `json:"On_sale_flag" validate:"bool"`
}
type ArtCollectionMetadata struct {
Painting_name string `json:"Painting_name" validate:"string"`
Description string `json:"Description" validate:"string"`
Image string `json:"Image" validate:"string"`
Painter_name string `json:"Painter_name" validate:"string"`
}
Controlador
Há apenas um controlador principal.
type Controller struct {
Ctx trxcontext.TrxContext
}
Você pode criar qualquer número de classes, funções ou arquivos, mas apenas os métodos que são definidos dentro da classe de 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 NFT Gerados Automaticamente
O Blockchain App Builder gera automaticamente métodos para suportar ciclos de vida de NFTs e NFTs. Você pode usar esses métodos para inicializar NFTs, gerenciar funções e contas e concluir outras tarefas do ciclo de vida de NFT sem qualquer codificação adicional.
O Blockchain App Builder gera automaticamente métodos para suportar ciclos de vida de NFTs e NFTs. Você pode usar esses métodos para inicializar NFTs, gerenciar funções e contas e concluir outras tarefas do ciclo de vida de NFT sem qualquer codificação adicional. Os métodos da Controladora devem ser públicos para serem chamados. Os nomes dos métodos públicos começam com um caractere maiúsculo. Os nomes dos métodos que começam com um caractere minúsculo são privados.
- 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
-
AddTokenAdmin
- Este método adiciona um usuário como um
Token Admin
do chaincode. Este método pode ser chamado somente por umToken Admin
do chaincode. -
RemoveTokenAdmin
- Este método remove um usuário como um
Token Admin
do chaincode. Este método pode ser chamado somente por umToken Admin
do chaincode. Você não pode usar esse método para remover a si mesmo como umToken Admin
. -
IsTokenAdmin
- Esse método retornará o valor booliano
true
se o chamador da função forToken Admin
; caso contrário, ele retornaráfalse
. UmToken Admin
pode chamar essa função em qualquer outro usuário na rede blockchain. Outros usuários só podem chamar esse método em suas próprias contas. -
GetAllTokenAdmins
- Esse método retorna uma lista de todos os usuários que são um
Token Admin
do chaincode. Este método pode ser chamado somente peloToken Admin
do chaincode.
Métodos para 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
. OUserId
é o nome do usuário ou o ID do 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 atualizando o chaincode, passe uma lista vazia ([]
). Qualquer outra informação no parâmetroadminList
é ignorada durante os upgrades. -
GetAllTokens
- Esse método retorna todos os ativos de token salvos no banco de dados de estado. Este método pode ser chamado somente por um
Token Admin
do chaincode. Esse método usa consultas ricas em SQL de BD Berkeley e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
GetAllTokensByUser
- Esse método retorna todos os ativos de token pertencentes a um usuário especificado. Esse método usa consultas ricas em SQL de BD Berkeley 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. -
GetTokenById
- 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. -
GetTokenHistory
- Este método retorna o histórico de um ID de token especificado. Esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. Qualquer um pode chamar esse método.
-
getTokenObject
- Este é um método de utilitário que retorna uma instância do token para um ID de token especificado. Esse método é usado por muitos dos métodos gerados automaticamente para extrair objetos de token. Você pode chamar esse método conforme necessário nos métodos personalizados. Quando você criar um ativo ou uma classe tokenizada, atualize o caso de alternância com a classe
Token
correspondente para retornar o objeto de token correto. O comandoochain sync
no Blockchain App Builder cria automaticamente um caso de alternância quando um ativo tokenizado é criado no arquivo de especificação. Como esse método é privado, ele não é diretamente invocável e só pode ser chamado de outros métodos. -
OwnerOf
- Este método retorna o ID da conta do proprietário do ID do token especificado. Qualquer um pode chamar esse método.
-
Name
- Esse método retorna o nome da classe do token. Qualquer um pode chamar esse método.
-
Symbol
- Esse método retorna o símbolo da classe do token. Qualquer um pode chamar esse método.
-
TokenURI
- Esse método retorna o URI de um token especificado. Qualquer um pode chamar esse método.
-
TotalSupply
- Este método retorna o número total de tokens cunhados. Este método pode ser chamado somente 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. Este método pode ser chamado somente por um
Token Admin
do chaincode.
Métodos para Gerenciamento de Contas
-
CreateAccount
- Esse método cria uma conta para um usuário e token especificados. Uma conta deve ser criada para qualquer usuário que terá tokens a qualquer momento. As contas rastreiam o número de NFTs que um usuário tem. Os usuários devem ter contas na rede para concluir operações relacionadas a token. Você pode criar apenas uma conta NFT por usuário.
Um ID de conta é um conjunto alfanumérico de caracteres, prefixado com
oaccount~
e seguido por um hash SHA-256 do ID do provedor de serviços de associação (OrgId
) do usuário na organização de rede atual, o nome de usuário ou o ID de e-mail (UserId
) do proprietário da instância ou do usuário que está conectado à instância e a string constantenft
. Este método pode ser chamado somente peloToken Admin
do chaincode. -
BalanceOf
- Este método retorna o número total de NFTs que um usuário especificado mantém. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário da conta. -
GetAllAccounts
- Esse método retorna uma lista de todas as contas. Este método pode ser chamado somente por um
Token Admin
do chaincode. Esse método usa consultas ricas em SQL de BD Berkeley e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
GetAccountByUser
- Este método retorna detalhes da conta de um usuário especificado. 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 uma conta especificada. Esse método pode ser chamado por qualquer usuário.
-
GetAccountHistory
- Este método retorna o histórico da conta de um usuário especificado. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário da conta.
Métodos para Gerenciamento de Atribuições
-
AddRole
- Este método adiciona uma atribuição a um usuário especificado. Este método pode ser chamado somente por um
Token Admin
do chaincode. -
RemoveRole
- Este método remove uma atribuição de um usuário especificado. Este método pode ser chamado somente por um
Token Admin
do chaincode. -
GetAccountsByRole
- Esse método retorna uma lista de todos os IDs de contas para uma função especificada. Este método pode ser chamado somente por um
Token Admin
do chaincode. -
GetUsersByRole
- Esse método retorna uma lista de todos os usuários de uma atribuição especificada. Este método pode ser chamado somente por um
Token Admin
do chaincode. -
IsInRole
- Esse método retorna um valor Booliano para indicar se um usuário tem uma atribuição especificada. Esse método só pode ser chamado por um
Token Admin
do chaincode ou peloAccount Owner
da conta.
Métodos para Gerenciamento do Histórico de Transações
-
GetAccountTransactionHistory
- Este método retorna o histórico de transações da conta para um usuário especificado. Esse método pode ser chamado pelo
Token Admin
do chaincode ou pelo proprietário da conta. -
GetAccountTransactionHistoryWithFilters
- Esse método retorna o histórico de transações da conta de um usuário especificado, filtrado por
PageSize
,Bookmark
,StartTime
eEndTime
. Esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. Esse método só pode ser chamado por umToken Admin
do chaincode ou pelo proprietário da conta. -
GetTransactionById
- Este método retorna o histórico de transações de um ID de transação especificado. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário da conta. -
DeleteHistoricalTransactions
- Este método exclui transações anteriores a um timestamp especificado no banco de dados de estado. Este método pode ser chamado somente pelo
Token Admin
do chaincode.
Métodos para Gerenciamento do Comportamento de Token - Comportamento Mínimo
-
Create<Token Name>Token
- Este método cria (mints) um NFT. O ativo e as propriedades associadas são salvos no banco de dados de estado. O chamador desta transação deve ter uma conta de token. O chamador desta transação se torna o proprietário do NFT. Se o arquivo de especificação de token incluir a seção
roles
parabehaviors
e a propriedademinter_role_name
pararoles
, o chamador da transação deverá ter a atribuição de minter. Caso contrário, qualquer chamador pode cunhar NFTs. -
Update<Token Name>Token
- Este método atualiza as propriedades do token. Esse método só pode ser chamado pelo usuário que é o proprietário ou criador do token. Após a criação de um ativo de token, somente o proprietário do token poderá atualizar as propriedades personalizadas do token. Se o usuário for proprietário do token e criador de um token, ele também poderá atualizar a propriedade
TokenDesc
. Os metadados do token não podem ser atualizados. Você deve passar todas as propriedades de token para esse método, mesmo que queira atualizar apenas determinadas propriedades.
Métodos para Gerenciamento do Comportamento de Token - Comportamento Transferível
-
SafeTransferFrom
- Este método transfere a propriedade do NFT especificado do chamador para outra conta. Este método inclui as seguintes validações:
- O token existe e não é queimado.
- A conta do remetente e a conta do recebedor existem e não são a mesma conta.
- A conta do remetente possui o token.
- O chamador da função é o remetente.
-
TransferFrom
- Este método transfere a propriedade do NFT especificado de uma conta de remetente para uma conta de destinatário. É responsabilidade do chamador passar os parâmetros corretos. Esse método pode ser chamado por qualquer usuário, não apenas pelo proprietário do token. Este método inclui as seguintes validações:
- O token existe e não é queimado.
- A conta do remetente e a conta do recebedor existem e não são a mesma conta.
- A conta do remetente possui o token.
Métodos para Gerenciamento do Comportamento de Token - Comportamento Queimável
-
Burn
- Este método desativa ou queima o NFT especificado da conta do chamador. O chamador desse método deve ter uma conta. Um token não pode ser gravado, a menos que o arquivo de especificação do token inclua o comportamento
burnable
. Se nenhuma propriedadeburner_role_name
for especificada na seçãoroles
do arquivo de especificação, o proprietário do token poderá gravar o token. Se uma propriedadeburner_role_name
for especificada na seçãoroles
, o usuário designado à atribuição de gravador que também é o mineiro (criador) do token poderá gravar o token. -
BurnNFT
- Esse método desativa ou queima o NFT especificado da conta do chamador e retorna um objeto de token e um histórico de token. O chamador desse método deve ter uma conta. Um token não pode ser gravado, a menos que o arquivo de especificação do token inclua o comportamento
burnable
. Se nenhuma propriedadeburner_role_name
for especificada na seçãoroles
do arquivo de especificação, o proprietário do token poderá gravar o token. Se uma propriedadeburner_role_name
for especificada na seçãoroles
, o usuário designado à atribuição de gravador que também é o mineiro (criador) ou proprietário do token poderá gravar o token.
Métodos Personalizados
Você pode usar os métodos SDK de token para criar métodos personalizados para seu aplicativo de negócios.
O exemplo a seguir mostra como usar métodos SDK de token em métodos personalizados. Quando o método Sell
é chamado, ele publica um token à venda por um preço especificado.
func (t *Controller) Sell(tokenId string, sellingPrice int) (interface{}, error) {
var tokenAsset ArtCollection
_, err := t.Ctx.ERC721Token.Get(tokenId, &tokenAsset)
if err != nil {
return nil, err
}
/** * price is a custom asset
attribute to set the price of a non-fungible token in the
marketplace */
tokenAsset.Price = sellingPrice
/** * on_sale_flag is a
custom asset attribute that maintains non-fungible token selling status in the
marketplace */
tokenAsset.On_sale_flag = true
_, err = t.Ctx.ERC721Token.UpdateToken(tokenAsset)
if err != nil {
return nil, err
}
msg := fmt.Sprintf("Token ID : %s has been posted for selling in the marketplace", tokenId)
return msg, nil
}
Métodos do NFT 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
Token Admin
ou Account Owner
do token. Você pode usar esse recurso para garantir que as operações sejam executadas apenas pelos usuários desejados. Qualquer acesso não autorizado resulta em erro. Para usar a função de controle de acesso, importe a classe Authorization
do módulo ../lib/auth
.import { ERC721Authorization } from '../lib/erc721-auth';
-
CheckAuthorization
- Use esse método para adicionar uma verificação de controle de acesso a uma operação. A maioria dos métodos gerados automaticamente inclui o controle de acesso. Determinados métodos de token só podem ser executados por um
ERC721Admin
ou peloAccount Owner
do token ou peloMultipleAccountOwner
para usuários com várias contas. O métodoCheckAuthorization
faz parte do pacoteerc721Auth
, que você acessa por meio da estruturaCtx
(receptor). O mapeamento do controle de acesso é descrito no arquivooChainUtil.go
, conforme mostrado no texto a seguir. Você pode modificar o controle de acesso editando o arquivooChainUtil.go
. 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.var t TokenAccess var r RoleAccess var a AccountAccess var as AccountStatusAccess var h HoldAccess var ad AdminAccess var trx TransactionAccess var tc TokenConversionAccess var auth AuthAccess var erc721ad ERC721AdminAccess var erc721t ERC721TokenAccess var erc721r ERC721RoleAccess var erc721a ERC721AccountAccess var erc721as ERC721AccountStatusAccess var erc721trx ERC721TransactionAccess auth.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner"} trx.DeleteHistoricalTransactions = []string{"Admin"} ad.AddAdmin = []string{"Admin"} ad.RemoveAdmin = []string{"Admin"} ad.GetAllAdmins = []string{"Admin", "OrgAdmin"} ad.AddOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.RemoveOrgAdmin = []string{"Admin", "OrgAdminOrgIdCheck"} ad.GetOrgAdmins = []string{"Admin", "OrgAdmin"} ad.IsTokenAdmin = []string{"Admin", "MultipleAccountOwner", "OrgAdmin"} t.Save = []string{"Admin"} t.GetAllTokens = []string{"Admin", "OrgAdmin"} t.Update = []string{"Admin"} t.GetTokenDecimals = []string{"Admin", "OrgAdmin"} t.GetTokensByName = []string{"Admin", "OrgAdmin"} t.AddRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.RemoveRoleMember = []string{"Admin", "OrgAdminRoleCheck"} t.IsInRole = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} t.GetTotalMintedTokens = []string{"Admin", "OrgAdmin"} t.GetNetTokens = []string{"Admin", "OrgAdmin"} t.Get = []string{"Admin", "OrgAdmin"} t.GetTokenHistory = []string{"Admin", "OrgAdmin"} a.CreateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} a.AssociateToken = []string{"Admin", "OrgAdminAccountIdCheck"} a.GetAllAccounts = []string{"Admin"} a.GetAllOrgAccounts = []string{"Admin", "OrgAdminOrgIdCheck"} a.GetAccount = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.History = []string{"Admin", "AccountOwner"} a.GetAccountTransactionHistory = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetSubTransactionsById = []string{"Admin", "TransactionInvoker"} a.GetSubTransactionsByIdWithFilters = []string{"Admin", "TransactionInvoker"} a.GetAccountBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountOnHoldBalance = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetOnHoldIds = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} a.GetAccountsByUser = []string{"Admin", "OrgAdminOrgIdCheck", "MultipleAccountOwner"} as.Get = []string{"Admin", "OrgAdminAccountIdCheck", "AccountOwner"} as.ActivateAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.SuspendAccount = []string{"Admin", "OrgAdminOrgIdCheck"} as.DeleteAccount = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetAccountsByRole = []string{"Admin"} r.GetUsersByRole = []string{"Admin"} r.GetOrgAccountsByRole = []string{"Admin", "OrgAdminOrgIdCheck"} r.GetOrgUsersByRole = []string{"Admin", "OrgAdminOrgIdCheck"} tc.InitializeExchangePoolUser = []string{"Admin"} tc.AddConversionRate = []string{"Admin"} tc.UpdateConversionRate = []string{"Admin"} tc.GetConversionRate = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.GetConversionRateHistory = []string{"Admin", "OrgAdmin", "AnyAccountOwner"} tc.TokenConversion = []string{"Admin", "AnyAccountOwner"} tc.GetExchangePoolUser = []string{"Admin"} erc721ad.AddAdmin = []string{"Admin"} erc721ad.GetAllAdmins = []string{"Admin"} erc721ad.IsTokenAdmin = []string{"Admin"} erc721ad.RemoveAdmin = []string{"Admin"} erc721trx.DeleteHistoricalTransactions = []string{"Admin"} erc721t.Save = []string{"Admin"} erc721t.GetAllTokens = []string{"Admin"} erc721t.Update = []string{"Admin"} erc721t.GetTokensByName = []string{"Admin"} erc721t.AddRoleMember = []string{"Admin"} erc721t.RemoveRoleMember = []string{"Admin"} erc721t.IsInRole = []string{"Admin", "AccountOwner"} erc721t.Get = []string{"Admin", "TokenOwner"} erc721t.GetAllTokensByUser = []string{"Admin", "AccountOwner"} erc721t.TotalSupply = []string{"Admin"} erc721t.TotalNetSupply = []string{"Admin"} erc721t.History = []string{"Admin"} erc721a.CreateAccount = []string{"Admin"} erc721a.CreateUserAccount = []string{"Admin"} erc721a.CreateTokenAccount = []string{"Admin"} erc721a.AssociateFungibleTokenToAccount = []string{"Admin", "AccountOwner"} erc721a.GetAllAccounts = []string{"Admin"} erc721a.History = []string{"Admin", "AccountOwner"} erc721a.GetAccountTransactionHistory = []string{"Admin", "AccountOwner"} erc721a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "AccountOwner"} erc721a.GetAccountByUser = []string{"Admin", "MultipleAccountOwner"} erc721a.BalanceOf = []string{"Admin", "MultipleAccountOwner"} erc721as.Get = []string{"Admin", "AccountOwner"} erc721as.ActivateAccount = []string{"Admin"} erc721as.SuspendAccount = []string{"Admin"} erc721as.DeleteAccount = []string{"Admin"} erc721r.GetAccountsByRole = []string{"Admin"} erc721r.GetUsersByRole = []string{"Admin"} var accessMap TokenAccessControl accessMap.Token = t accessMap.Account = a accessMap.AccountStatus = as accessMap.Hold = h accessMap.Role = r accessMap.Admin = ad accessMap.Auth = auth accessMap.TokenConversion = tc accessMap.ERC721ADMIN = erc721ad accessMap.ERC721TOKEN = erc721t accessMap.ERC721ACCOUNT = erc721a accessMap.ERC721AccountStatus = erc721as accessMap.ERC721ROLE = erc721r accessMap.ERC721TRANSACTION = erc721trx
-
IsUserTokenAdmin
- Esse método retornará um mapa com o valor booliano
true
se o chamador da função forToken Admin
. Caso contrário, o método retornaráfalse
. -
AddAdmin
- Esse método adiciona um usuário como
Token Admin
do chaincode do token. -
RemoveAdmin
- Esse método remove um usuário como
Token Admin
do chaincode do token. -
GetAllAdmins
- Esse método retorna uma lista de todos os usuários
Token Admin
. -
GetAllAdminUsers
- Esse método retorna uma lista de todos os usuários
Token Admin
.
Métodos para Gerenciamento de Configuração de Token
-
CreateToken
- Este método cria um token e salva suas propriedades no banco de dados de estado. Esse método só pode ser chamado por usuários com a atribuição de minter.
-
GetTokenUri
- Esse método retorna o URI do token para um token especificado.
-
TokenUri
- Esse método retorna o URI do token para um token especificado.
-
Symbol
- Esse método retorna o símbolo da classe do token.
-
Name
- Esse método retorna o nome da classe do token.
-
OwnerOf
- Este método retorna o ID da conta do proprietário de um token especificado.
-
TotalSupply
- Este método retorna o número total de NFTs cunhados.
-
GetAllTokens
- Esse método retorna todos os ativos de token salvos no banco de dados de estado. Esse método usa consultas ricas em SQL de BD Berkeley e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
-
GetAllTokensByUser
- Este método retorna todos os tokens pertencentes a um ID de conta especificado. Esse método usa consultas ricas em SQL de BD Berkeley e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
-
Get
- Esse método retornará o objeto de token especificado se ele estiver presente no banco de dados de estado.
-
UpdateToken
- Este método atualiza as propriedades do token. Esse método só pode ser chamado pelo proprietário ou criador do token. Após a criação de um ativo de token, somente o proprietário do token poderá atualizar as propriedades personalizadas do token. Se o usuário for proprietário do token e criador de um token, ele também poderá atualizar a propriedade
TokenDesc
. Os metadados do token não podem ser atualizados. Você deve passar todas as propriedades de token para esse método, mesmo que queira atualizar apenas determinadas propriedades. -
History
- Este método retorna o histórico do token especificado.
-
GetNewCtx
- Esse método retorna um novo objeto
TrxContext
. A estruturatrxcontext
contém referências a todas as bibliotecas SDK. Acesse os métodos sdk usando somente esse objeto. O objetotrxcontext
mantém a exclusividade mútua de stubs de transação nas bibliotecas SDK quando transações simultâneas estão em execução.
Métodos para Gerenciamento de Conta
-
GenerateAccountId
- Esse método retorna um ID de conta, que é formado pela concatenação do ID do provedor de serviços de associação (
orgId
) e do nome de usuário ou ID de e-mail (userId
) e, em seguida, pela criação de um hash SHA-256. -
CreateAccount
- Este método cria uma conta para um usuário especificado. Uma conta deve ser criada para qualquer usuário que terá tokens a qualquer momento. As contas rastreiam o número de NFTs que um usuário tem. Os usuários devem ter contas na rede para concluir operações relacionadas a token. Você pode criar apenas uma conta NFT por usuário.
Um ID de conta é um conjunto alfanumérico de caracteres, prefixado com
oaccount~
e seguido por um hash SHA-256 do ID do provedor de serviços de associação (org_id
) do usuário na organização de rede atual, o nome de usuário ou o ID de e-mail (userId
) do proprietário da instância ou do usuário que está conectado à instância e a string constantenft
. -
GetAllAccounts
- Esse método retorna uma lista de todas as contas. Esse método usa consultas ricas em SQL de BD Berkeley e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
-
History
- Esse método retorna uma matriz dos detalhes do histórico da conta de uma conta especificada.
-
GetUserByAccountId
- Este método retorna os detalhes do usuário de uma conta especificada.
-
GetAccountWithStatusByUser
- Este método retorna detalhes da conta de um usuário especificado, incluindo o status da conta. Esse método só pode ser chamado por um
Token Admin
do chaincode ou peloAccount Owner
da conta. -
GetAccountByUser
- Este método retorna detalhes da conta de um usuário especificado. Esse método só pode ser chamado por um
Token Admin
do chaincode ou peloAccount Owner
da conta. -
BalanceOf
- Este método retorna o número total de NFTs que o usuário especificado mantém.
Métodos para Gerenciamento de Atribuições
-
AddRoleMember
- Este método adiciona uma atribuição a um usuário especificado.
-
RemoveRoleMember
- Esse método remove uma atribuição de um usuário e token especificados. Um ID de conta é formado pela criação de um hash SHA-256 do ID do provedor de serviços de associação concatenado (
orgId
) e do nome de usuário ou ID de e-mail (userId
). -
IsInRole
- Esse método retorna um valor Booliano para indicar se um usuário e token têm uma atribuição especificada. Um ID de conta é formado pela criação de um hash SHA-256 do ID do provedor de serviços de associação concatenado (
orgId
) e do nome de usuário ou ID de e-mail (userId
). -
GetAccountsByRole
- Esse método retorna uma lista de todos os IDs de contas para uma função especificada.
-
GetUsersByRole
- Esse método retorna uma lista de todos os usuários de uma atribuição especificada.
Métodos para Gerenciamento do Histórico de Transações
-
GetAccountTransactionHistory
- Esse método retorna uma matriz dos detalhes do histórico de transações de uma conta especificada.
-
GetAccountTransactionHistoryWithFilters
- Esse método retorna o histórico de transações da conta de um usuário especificado, filtrado por
PageSize
,Bookmark
,startTime
eendTime
. Esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
GetTransactionById
- Esse método retorna o histórico de um ativo
Transaction
. -
DeleteHistoricalTransactions
- Este método exclui transações anteriores a uma data especificada do banco de dados de estado.
Gerenciamento do Comportamento do Token - Comportamento Mínimo
-
GetMaxMintQuantity
- Este método retorna a quantidade mínima máxima de um token. Se o comportamento
max_mint_quantity
não estiver configurado no arquivo de especificação, o valor padrão será 0 e um número infinito de tokens poderá ser cunhado. -
GetTotalMintedTokens
- Este método retorna o número líquido total de tokens disponíveis no sistema para o token especificado. O número líquido de tokens disponíveis é o número total de tokens cunhados menos o número de tokens queimados.
Gerenciamento de Comportamento de Token - Comportamento Transferível
-
SafeTransferFrom
- Este método transfere a propriedade do NFT especificado do chamador para outra conta. Este método inclui as seguintes validações:
- O token existe e não é queimado.
- A conta do remetente e a conta do recebedor existem e não são a mesma conta.
- A conta do remetente possui o token.
- O chamador da função é o remetente.
-
TransferFrom
- Este método transfere a propriedade do NFT especificado de uma conta de remetente para uma conta de destinatário. É responsabilidade do chamador passar os parâmetros corretos. Esse método pode ser chamado por qualquer usuário, não apenas pelo proprietário do token. Este método inclui as seguintes validações:
- O token existe e não é queimado.
- A conta do remetente e a conta do recebedor existem e não são a mesma conta.
- A conta do remetente possui o token.
Gerenciamento de comportamento de token - Comportamento gravável
-
Burn
- Este método desativa ou queima o NFT especificado da conta do chamador. O chamador desse método deve ter uma conta. Um token não pode ser gravado, a menos que o arquivo de especificação do token inclua o comportamento
burnable
. Se nenhuma propriedadeburner_role_name
for especificada na seçãoroles
do arquivo de especificação, o proprietário do token poderá gravar o token. Se uma propriedadeburner_role_name
for especificada na seçãoroles
, o usuário designado à atribuição de gravador que também é o mineiro (criador) do token poderá gravar o token. O métodoburn
faz parte do pacoteERC721Token
, que você acessa por meio do receptor da estruturaCtx
.