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 scaffolded totalmente funcional.
O projeto gera automaticamente classes e funções de ciclo de vida de token, incluindo métodos CRUD e não CRUD. Validação de argumentos, marshalling/unmarshalling, e capacidade de persistência transparente são todos suportados automaticamente.
Para obter informações sobre o projeto e os métodos scaffolded que não estão diretamente relacionados a tokens, consulte Projeto de Código de Cadeia do Andaime Go.
Modelo
O Recurso de Persistência Transparente, ou ORM simplificado, é capturado na classe OchainModel
. O modelo a seguir mostra um token inteiro não fungível.
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 fracionário não fungível.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"`
}
Controladora
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 definidos na classe do controlador principal são invocáveis. Os outros métodos estão ocultos.
Você pode usar os métodos do token SDK para gravar métodos personalizados para seu aplicativo de negócios.
Métodos de Token Gerados Automaticamente
O Blockchain App Builder gera automaticamente métodos para suportar tokens e ciclos de vida de token. Você pode usar esses métodos para inicializar tokens, gerenciar atribuições e contas e concluir outras tarefas de ciclo de vida de token sem qualquer codificação adicional. Os métodos do controlador devem ser públicos para serem invocáveis. Os nomes de métodos públicos começam com um caractere maiúsculo. Os nomes de 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
-
IsTokenAdmin
- Este método retornará o valor Booliano
true
se o chamador da função for umToken Admin
, caso contrário, retornaráfalse
. Esse método só pode ser chamado peloToken Admin
do chaincode. -
AddTokenAdmin
- Este método adiciona um usuário como um
Token Admin
do chaincode. Esse método só pode ser chamado por umToken Admin
do chaincode. -
RemoveTokenAdmin
- Este método remove um usuário como um
Token Admin
do chaincode. Esse método só pode ser chamado por umToken Admin
do chaincode. Você não pode se remover como umToken Admin
. -
GetAllTokenAdmins
- Este método retorna uma lista de todos os usuários que são um
Token Admin
do chaincode. Esse método só pode ser chamado peloToken Admin
do chaincode.
Métodos para Gerenciamento de Configuração de Token
-
Init
- Esse método é chamado quando o chaincode é instanciado. Todo
Token Admin
é identificado pelas informaçõesuserId
eorgId
no parâmetroadminList
. OuserId
é o nome de usuário ou o ID de e-mail do proprietário da instância ou do usuário que está conectado à instância. OorgId
é o ID do provedor de serviços de associação (MSP) do usuário na organização de rede atual. O parâmetroadminList
é obrigatório na primeira vez que você implanta o chaincode. Se você estiver fazendo upgrade do chaincode, informe uma lista vazia ([]
). Se você for o usuário que implantou inicialmente o chaincode, também poderá especificar novos administradores no parâmetroadminList
quando estiver fazendo upgrade do chaincode. Qualquer outra informação no parâmetroadminList
será ignorada durante os upgrades. -
Create<Token Name>Token
- Este método cria tokens. Cada token definido tem seu próprio método de criação. Para tokens fungíveis, esse método só pode ser chamado por um
Token Admin
do chaincode. Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método para criar um NFT. Se a função de minter não estiver definida, qualquer usuário poderá usar esse método para criar NFTs (mint). O usuário que chama esse método se torna o proprietário do NFT. -
Update<Token Name>Token
- Este método atualiza tokens. Cada token definido tem seu próprio método de atualização. Você não pode atualizar metadados de token ou o URI de token de tokens não fungíveis. Para tokens fungíveis, esse método só pode ser chamado por um
Token Admin
do chaincode. Para tokens não fungíveis, esse método só pode ser chamado pelo proprietário do token. -
GetTokenHistory
- Este método retorna o histórico de um ID de token especificado. Qualquer um pode chamar esse método.
-
GetAllTokens
- Este método retorna todos os ativos de token que são salvos no banco de dados de estado. Esse método só pode ser chamado por um
Token Admin
do chaincode. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
GetTokenById
- Este método retorna um objeto de token se o token estiver presente no banco de dados de estado. Para NFTs fracionais, a lista de proprietários também é retornada. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário do token. -
GetAllTokensByUser
- Este método retorna todos os ativos de token pertencentes a um usuário especificado. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário da conta. -
OwnerOf
- Este método retorna o ID da conta, o ID da organização e o ID do usuário do proprietário do ID do token especificado. Qualquer um pode chamar esse método.
-
URI
- Este método retorna o URI de um token especificado. Qualquer um pode chamar esse método.
-
Name
- Este método retorna o nome da classe de token. Qualquer um pode chamar esse método.
-
TotalSupply
- Este método retorna o número total de tokens cunhados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um
Token Admin
do chaincode. -
TotalNetSupply
- Este método retorna o número total de tokens cunhados menos o número de tokens gravados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado por um
Token Admin
do chaincode. -
GetTokensByName
- Este método retorna todos os ativos de token para um nome de token especificado. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. Esse método só pode ser chamado por um
Token Admin
do chaincode. -
GetTokenDecimal
- Este método retorna o número de casas decimais para um token especificado. Esse método só pode ser chamado por um
Token Admin
do chaincode.
Métodos para Gerenciamento de Contas
-
CreateAccount
- Este método cria uma conta para um usuário especificado e contas de token associadas para tokens fungíveis ou não fungíveis. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário possui. Os usuários devem ter contas na rede para concluir operações relacionadas a token. Esse método só pode ser chamado por um
Token Admin
do chaincode.Uma conta de usuário tem um ID exclusivo, formado por um hash SHA-256 do parâmetro
orgId
e do parâmetrouserId
.Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro
orgId
, o parâmetrouserId
, a string constanteft
separada pelo símbolo til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~
).Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro
orgId
, do parâmetrouserId
e da string constantenft
separada pelo símbolo til (~
). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a esta conta.Os IDs de conta do usuário começam com
ouaccount~
. Os IDs da conta de token começam comoaccount~
. -
CreateUserAccount
- Este método cria uma conta para um usuário especificado. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário possui. Os usuários devem ter contas na rede para concluir operações relacionadas a token.
ID da conta é um hash SHA-256 do parâmetro
orgId
e do parâmetrouserId
. Esse método só pode ser chamado por umToken Admin
do chaincode. -
CreateTokenAccount
- Este método cria uma conta de token fungível ou não fungível para associar a uma conta de usuário.
Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro
orgId
, o parâmetrouserId
, a string constanteft
separada pelo símbolo til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~
).Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro
orgId
, do parâmetrouserId
e da string constantenft
separada pelo símbolo til (~
). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a esta conta.Esse método só pode ser chamado por um
Token Admin
do chaincode. -
AssociateFungibleTokenAccount
- Este método associa a conta de token fungível de um usuário a um token fungível específico.
Esse método só pode ser chamado 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 detalhes da conta de token para um usuário especificado. Esse método só pode ser chamado por um
Token Admin
do chaincode ou peloAccount Owner
da conta. -
GetAllAccounts
- Este método retorna detalhes de todas as contas de usuário. Esse método só pode ser chamado por um
Token Admin
do chaincode. -
GetAccountDetailsByUser
- Este método retorna um resumo de conta para um usuário especificado e detalhes de tokens fungíveis e não fungíveis que estão associados ao usuário. Esse método só pode ser chamado por um
Token Admin
do chaincode ou peloAccount Owner
da conta. -
GetUserByAccountId
- Este método retorna os detalhes do usuário de um ID de conta especificado. Este método pode ser chamado por qualquer usuário.
Métodos para Gerenciamento de Atribuições
-
AddRole
- Este método adiciona uma atribuição a um usuário e token especificados. Esse método só pode ser chamado por um
Token Admin
do chaincode. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. O usuário especificado deve ter uma conta de token associada ao token fungível ou uma conta de token não fungível para atribuições NFT. A atribuição especificada deve existir no arquivo de especificação do token. -
IsInRole
- Este método retorna um valor booliano para indicar se um usuário tem uma função especificada. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado pelo
Token Admin
do código de cadeia ou peloAccount Owner
da conta. O usuário especificado deve ter uma conta de token associada ao token fungível ou uma conta de token não fungível para atribuições NFT. A atribuição especificada deve existir no arquivo de especificação do token. -
RemoveRole
- Este método remove uma atribuição de um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado 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 do token. -
GetAccountsByRole
- Este método retorna uma lista de todos os IDs de conta para uma função e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado pelo
Token Admin
do chaincode. -
GetUsersByRole
- Este método retorna uma lista de todos os usuários para uma atribuição e um token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token. Esse método só pode ser chamado pelo
Token Admin
do chaincode.
Métodos para Gerenciamento do Histórico de Transações
-
GetAccountTransactionHistory
- Este método retorna o histórico de transações da conta. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário da conta. Para tokens não fungíveis, esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
GetTransactionById
- Este método retorna os detalhes da transação para um ID de transação especificado. Qualquer um pode chamar esse método.
-
DeleteHistoricalTransactions
- Este método exclui transações antes de um timestamp especificado do banco de dados de estado. Esse método só pode ser chamado por um
Token Admin
do chaincode.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Mintable
-
MintBatch
- Este método cria (mints) vários tokens em uma operação em batch. Este método cria apenas tokens fungíveis ou tokens fracionários não fungíveis.
Para tokens fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Você não poderá usar mais do que a propriedade
max_mint_quantity
do token se essa propriedade tiver sido especificada quando o token foi criado ou atualizado.Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Além disso, o chamador também deve ser o criador do token. Não há limite superior para a quantidade de tokens fracionários não fungíveis que podem ser cunhados.
Você não pode usar este método para cunhar um token inteiro não fungível.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Transferível
-
BatchTransferFrom
- Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.
Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.
Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.
Este método não valida se o chamador do método é o remetente especificado. Este método pode ser chamado por qualquer usuário.
-
SafeBatchTransferFrom
- Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.
Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.
Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.
O chamador do método deve ser o remetente especificado. Este método pode ser chamado por qualquer usuário.
-
BalanceOfBatch
- Este método conclui uma operação em lote que obtém o saldo de contas de token. Os detalhes da conta são especificados em três listas separadas de IDs da organização, IDs usuário e IDs token. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelos proprietários da conta. Os proprietários da conta só podem ver os detalhes do saldo das contas de sua propriedade. -
ExchangeToken
- Este método troca tokens entre contas especificadas. Este método suporta apenas a troca entre um NFT e um token fungível ou um token fungível e um NFT. Esse método só pode ser chamado pelo proprietário da conta.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Queimável
-
BurnBatch
- Este método desativa ou queima os tokens fungíveis e não fungíveis especificados. Qualquer usuário pode chamar esse método.
-
BurnNFT
- Este método desativa ou grava o token não fungível especificado e retorna um objeto de token e um histórico de token. Qualquer usuário com a função de queimador pode chamar esse método.
Métodos SDK
- Gerenciamento de Controle de Acesso
- Gerenciamento de Configuração de Token
- Gerenciamento de Contas
- Gerenciamento de Atribuições
- Gerenciamento do Histórico de Transações
- Gerenciamento de Comportamento de Token
Métodos para Gerenciamento de Controle de Acesso
-
IsUserTokenAdmin
- Este método retornará o valor Booliano
true
se o usuário especificado for umToken Admin
efalse
caso contrário. O método só pode ser chamado por umToken Admin
do chaincode do token. -
AddAdmin
- Esse método adiciona um usuário como
Token Admin
do código de cadeia do token. O método só pode ser chamado por umToken Admin
do chaincode do token. -
RemoveAdmin
- Esse método remove um usuário como um
Token Admin
do chaincode do token. O método só pode ser chamado por umToken Admin
do chaincode do token. Você não pode se remover como umToken Admin
. -
GetAllAdminUsers
- Esse método retorna uma lista de todos os usuários do
Token Admin
. -
CheckAuthorization
- Use este método para adicionar uma verificação de controle de acesso a uma operação. Esta é uma função assíncrona. 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
Métodos para Gerenciamento de Configuração de Token
-
Save
- Este método cria tokens. Cada token definido tem seu próprio método de criação. Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método para criar um NFT. Caso contrário, qualquer usuário poderá usar esse método para criar NFTs (mint). O usuário que chama esse método se torna o proprietário do NFT (inteiro ou fracionário).
-
Update
- Este método atualiza tokens. Você não pode atualizar metadados de token ou o URI de token de tokens não fungíveis.
-
History (Token)
- Este método retorna o histórico de um ID de token especificado.
-
GetAllTokens
- Este método retorna todos os ativos de token que são salvos no banco de dados de estado. Esse método só pode ser chamado por um
Token Admin
do chaincode. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
Get (Token)
- Este método retorna um objeto de token se o token estiver presente no banco de dados de estado. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário do token. Para NFTs fracionais, a lista de proprietários também é retornada. -
GetAllTokensByUser
- Este método retorna todos os ativos de token pertencentes a um usuário especificado. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
-
OwnerOf
- Este método retorna o ID da conta, o ID da organização e o ID do usuário do proprietário do ID do token especificado.
-
TokenURI
- Este método retorna o URI de um token especificado. Qualquer um pode chamar esse método.
-
Name
- Este método retorna o nome da classe de token. Qualquer um pode chamar esse método.
-
TotalSupply
- Este método retorna o número total de tokens cunhados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
TotalNetSupply
- Este método retorna o número total de tokens cunhados menos o número de tokens gravados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
GetTokensByName
- Este método retorna todos os ativos de token para um nome de token especificado. Este método usa consultas avançadas de SQL do Berkeley DB e só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform.
-
GetDecimals
- Este método retorna o número de casas decimais para um token especificado. Se o comportamento divisível não for especificado para o token, o valor padrão de zero casas decimais será retornado.
Métodos para Gerenciamento de Contas
-
CreateAccount
- Este método cria uma conta para um usuário especificado e contas de token associadas para tokens fungíveis ou não fungíveis. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário possui. Os usuários devem ter contas na rede para concluir operações relacionadas a token. Esse método só pode ser chamado por um
Token Admin
do chaincode.Uma conta de usuário tem um ID exclusivo, formado por um hash SHA-256 do parâmetro
orgId
e do parâmetrouserId
.Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro
orgId
, o parâmetrouserId
, a string constanteft
separada pelo símbolo til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~
).Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro
orgId
, do parâmetrouserId
e da string constantenft
separada pelo símbolo til (~
). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a essa única conta de token não fungível. -
CreateUserAccount
- Este método cria uma conta para um usuário especificado. É necessário criar uma conta para qualquer usuário que tenha tokens a qualquer momento. A conta de usuário rastreia a conta NFT e as contas de token fungíveis que um usuário possui. Os usuários devem ter contas na rede para concluir operações relacionadas a token.
ID da conta é um hash SHA-256 do parâmetro
orgId
e do parâmetrouserId
. Esse método só pode ser chamado por umToken Admin
do chaincode. -
CreateTokenAccount
- Este método cria uma conta de token fungível ou não fungível para associar a uma conta de usuário.
Um usuário pode ter várias contas de token fungíveis com IDs de conta exclusivos. Os IDs da conta do token fungível são formados por um hash SHA-256 do parâmetro
orgId
, o parâmetrouserId
, a string constanteft
separada pelo símbolo til (~
) e um número de contador que significa o índice da conta fungível que está sendo criada separada pelo símbolo til (~
).Um usuário pode ter apenas uma conta de token não fungível. Os IDs de conta de token não fungíveis são exclusivos e são formados por um hash SHA-256 do parâmetro
orgId
, do parâmetrouserId
e da string constantenft
separada pelo símbolo til (~
). Todos os tokens não fungíveis que um usuário possui, sejam inteiros ou fracionários, estão vinculados a essa única conta de token não fungível.Esse método só pode ser chamado por um
Token Admin
do chaincode. -
AssociateTokenToToken
- Este método associa a conta de token fungível de um usuário a um token fungível específico.
-
GetAccountHistory
- Este método retorna o histórico de uma conta de token especificada.
-
GetAccountWithStatus
- Este método retorna detalhes da conta de token para 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 detalhes da conta de token para um usuário especificado. Esse método só pode ser chamado por um
Token Admin
do chaincode ou peloAccount Owner
da conta. -
GetAllAccounts
- Este método retorna detalhes de todas as contas de usuário.
-
GetAccountDetailsByUser
- Este método retorna um resumo de conta para um usuário especificado e detalhes de tokens fungíveis e não fungíveis que estão associados ao usuário.
-
GetUserByAccountId
- Este método retorna os detalhes do usuário de um ID de conta especificado.
Métodos para Gerenciamento de Atribuições
-
AddRoleMember
- Este método adiciona uma atribuição a um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
IsInRole
- Este método retorna um valor booliano para indicar se um usuário tem uma função especificada. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
RemoveRoleMember
- Este método remove uma atribuição de um usuário e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
GetAccountsByRole
- Este método retorna uma lista de todos os IDs de conta para uma função e token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
-
GetUsersByRole
- Este método retorna uma lista de todos os usuários para uma atribuição e um token especificados. Os tokens fungíveis são especificados pelo ID do token. Os tokens não fungíveis são especificados pelo nome do token.
Métodos para Gerenciamento do Histórico de Transações
-
GetAccountTransactionHistory
- Este método retorna o histórico de transações da conta. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelo proprietário da conta. Para tokens não fungíveis, esse método só pode ser chamado quando conectado à rede remota do Oracle Blockchain Platform. -
GetTransactionById
- Este método retorna os detalhes da transação para um ID de transação especificado.
-
DeleteHistoricalTransactions
- Este método exclui transações antes de um timestamp especificado do banco de dados de estado.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Mintable
-
MintBatch
- Este método cria (mints) vários tokens em uma operação em batch. Este método cria apenas tokens fungíveis ou tokens fracionários não fungíveis.
Para tokens fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Você não poderá usar mais do que a propriedade
max_mint_quantity
do token se essa propriedade tiver sido especificada quando o token foi criado ou atualizado.Para tokens não fungíveis, se a função de minter for definida no arquivo de especificação, qualquer usuário com a função de minter poderá chamar esse método. Se não, qualquer usuário pode usar esse método para cunhar tokens. Além disso, o chamador também deve ser o criador do token. Não há limite superior para a quantidade de tokens fracionários não fungíveis que podem ser cunhados.
Você não pode usar este método para cunhar um token inteiro não fungível.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Transferível
-
BatchTransferFrom
- Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.
Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.
Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.
Este método não valida se o chamador do método é o remetente especificado.
-
SafeBatchTransferFrom
- Este método conclui uma operação em batch que transfere tokens especificados em uma lista de IDs de token de um usuário para outro.
Para NFTs, como o método transfere a propriedade do NFT, o remetente do NFT deve possuir o token.
Para NFTs fracionários, se um usuário (incluindo o criador do token) transferir todos os compartilhamentos que possui, ele perderá a propriedade do token. Se qualquer compartilhamento de um token for transferido para um usuário, esse usuário se tornará automaticamente um dos proprietários do NFT fracionário.
O chamador do método deve ser o remetente especificado.
-
BalanceOfBatch
- Este método conclui uma operação em lote que obtém o saldo de contas de token. Os detalhes da conta são especificados em três listas separadas de IDs da organização, IDs usuário e IDs token. Esse método só pode ser chamado por um
Token Admin
do chaincode ou pelos proprietários da conta. Os proprietários da conta só podem ver os detalhes do saldo das contas de sua propriedade. -
ExchangeToken
- Este método troca tokens entre contas especificadas. Este método suporta apenas a troca entre um NFT (inteiro ou fracionário) e um token fungível ou um token fungível e um NFT (inteiro ou fracionário). Esse método só pode ser chamado pelo proprietário da conta.
Métodos para Gerenciamento de Comportamento de Token - Comportamento Queimável