Projeto Scaffolded Go Token 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 Andaime Go Chaincode.
Modelo
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.
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"`
TokenStandard string `json:"TokenStandard" final:"erc1155+"`
TokenType string `json:"TokenType" final:"nonfungible" validate:"regexp=^nonfungible$"`
TokenUnit string `json:"TokenUnit" final:"whole" validate:"regexp=^whole$"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":20000}"`
Behaviors []string `json:"Behaviors" final:"[\"indivisible\",\"singleton\",\"mintable\",\"transferable\",\"burnable\",\"roles\"]"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
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" mandatory:"true" 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"`
}
type Loyalty 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:"loyalty"`
TokenDesc string `json:"TokenDesc" validate:"max=256"`
TokenStandard string `json:"TokenStandard" final:"erc1155+"`
TokenType string `json:"TokenType" final:"fungible" validate:"regexp=^fungible$"`
TokenUnit string `json:"TokenUnit" final:"fractional" validate:"regexp=^fractional$"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":10000}"`
Divisible map[string]interface{} `json:"Divisible" final:"{\"Decimal\":2}"`
Behaviors []string `json:"Behaviors" final:"[\"divisible\",\"mintable\",\"transferable\",\"burnable\",\"roles\"]"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
Currency_name string `json:"Currency_name" validate:"string"`
Token_to_currency_ratio int `json:"Token_to_currency_ratio" validate:"int"`
Metadata interface{} `json:"Metadata,omitempty"`
}
O modelo a seguir mostra um token não fungível fracionário.type RealEstateProperty 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:"realestateproperty"`
TokenDesc string `json:"TokenDesc" validate:"max=256"`
TokenStandard string `json:"TokenStandard" final:"erc1155+"`
TokenType string `json:"TokenType" final:"nonfungible" validate:"regexp=^nonfungible$"`
TokenUnit string `json:"TokenUnit" final:"fractional" validate:"regexp=^fractional$"`
Mintable map[string]interface{} `json:"Mintable" final:"{\"Max_mint_quantity\":0}"`
Behaviors []string `json:"Behaviors" final:"[\"divisible\",\"mintable\",\"transferable\",\"roles\"]"`
Divisible map[string]interface{} `json:"Divisible" final:"{\"Decimal\":0}"`
Roles map[string]interface{} `json:"Roles" final:"{\"minter_role_name\":\"minter\"}"`
CreatedBy string `json:"CreatedBy,omitempty" validate:"string"`
CreationDate string `json:"CreationDate,omitempty" validate:"string"`
IsBurned bool `json:"IsBurned" validate:"bool"`
TokenUri string `json:"TokenUri" mandatory:"true" validate:"string,max=2000"`
Quantity float64 `json:"Quantity,omitempty"`
TokenMetadata RealEstatePropertyMetadata `json:"TokenMetadata"`
PropertySellingPrice int `json:"PropertySellingPrice" validate:"int"`
PropertyRentingPrice int `json:"PropertyRentingPrice" validate:"int"`
}
type RealEstatePropertyMetadata struct {
PropertyType string `json:"PropertyType" validate:"string"`
PropertyName string `json:"PropertyName" validate:"string"`
PropertyAddress string `json:"PropertyAddress" validate:"string"`
PropertyImage string `json:"PropertyImage" 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 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 ser públicos para serem chamados. Os nomes de 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 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
. Esse método só pode ser chamado peloToken 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 peloToken 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 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 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 pelo
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 pelo
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 pelo
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 pelo
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 pelo
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 pelo
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. 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 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. A maioria dos métodos gerados automaticamente inclui controle de acesso. Determinados métodos de token só podem ser executados pelo
ERC721Admin
ouAccount Owner
do token ou por umMultipleAccountOwner
para usuários com várias contas. O métodoCheckAuthorization
faz parte da classeerc721Auth
, que você acessa por meio do objetoCtx
. O mapeamento de controle de acesso é descrito no arquivooChainUtil.go
, conforme mostrado no texto a seguir. Você pode modificar o controle de acesso editando o arquivooChainUtil.go
.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 var erc1155ad ERC1155AdminAccess var erc1155t ERC1155TokenAccess var erc1155a ERC1155AccountAccess var erc1155as ERC1155AccountStatusAccess var erc1155trx ERC1155TransactionAccess var erc1155role ERC1155RoleAccess 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"} erc1155ad.AddAdmin = []string{"Admin"} erc1155ad.GetAllAdmins = []string{"Admin"} erc1155ad.IsUserTokenAdmin = []string{"Admin"} erc1155ad.RemoveAdmin = []string{"Admin"} erc1155t.AddRoleMember = []string{"Admin"} erc1155t.IsInRole = []string{"Admin"} erc1155t.GetAllTokens = []string{"Admin"} erc1155t.GetAllTokensByUser = []string{"Admin", "AccountOwner"} erc1155t.Get = []string{"Admin", "TokenOwner"} erc1155t.RemoveRoleMember = []string{"Admin"} erc1155t.TotalNetSupply = []string{"Admin"} erc1155t.TotalSupply = []string{"Admin"} erc1155t.GetTokenDecimal = []string{"Admin"} erc1155t.GetTokensByName = []string{"Admin"} erc1155t.GetTotalMintedTokens = []string{"Admin"} erc1155t.GetNetTokens = []string{"Admin"} erc1155t.Save = []string{"Admin"} erc1155t.Update = []string{"Admin"} erc1155trx.DeleteHistoricalTransactions = []string{"Admin"} erc1155role.GetAccountsByRole = []string{"Admin"} erc1155role.GetUsersByRole = []string{"Admin"} erc1155a.AssociateFungibleTokenToAccount = []string{"Admin", "AccountOwner"} erc1155a.BalanceOfBatch = []string{"Admin"} erc1155a.CreateAccount = []string{"Admin"} erc1155a.CreateTokenAccount = []string{"Admin"} erc1155a.CreateUserAccount = []string{"Admin"} erc1155a.GetAccountTransactionHistory = []string{"Admin", "AccountOwner"} erc1155a.GetAccountTransactionHistoryWithFilters = []string{"Admin", "AccountOwner"} erc1155a.GetAccountsByUser = []string{"Admin", "AccountOwner"} erc1155a.GetAccount = []string{"Admin", "AccountOwner"} erc1155a.History = []string{"Admin", "AccountOwner"} erc1155a.GetAllAccounts = []string{"Admin"} erc1155a.ExchangeToken = []string{"AccountOwner"} erc1155a.GetAccountDetailsByUser = []string{"Admin", "AccountOwner"} erc1155as.Get = []string{"Admin", "AccountOwner"} erc1155as.ActivateAccount = []string{"Admin"} erc1155as.SuspendAccount = []string{"Admin"} erc1155as.DeleteAccount = []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 accessMap.ERC1155Account = erc1155a accessMap.ERC1155AccountStatus = erc1155as accessMap.ERC1155Admin = erc1155ad accessMap.ERC1155Token = erc1155t accessMap.ERC1155Transaction = erc1155trx accessMap.ERC1155Role = erc1155role
-
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
. -
GetAllAdminUsers
- 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. Para NFTs fracionários, a lista de proprietários também é retornada. -
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 os detalhes da conta de token 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. -
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.
-
DeleteHistoricalTransactions
- 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