WEB3DEV

Cover image for Matrizes dentro de structs — como retornar matriz, problema e solução
Arnaldo Pereira Campos Junior
Arnaldo Pereira Campos Junior

Posted on

Matrizes dentro de structs — como retornar matriz, problema e solução

Olá a todos, este breve artigo falará sobre matrizes (arrays) dentro de structs e como obter valores dessas matrizes

Image description

Vamos dar uma olhada neste contrato, no começo temos companyIndex, depois há uma struct chamada Company com 3 valores, name, employeeIndex e Employees — a última é uma matriz.

Ok, o próximo é o mapeamento que nos permite vincular as estruturas de nossa empresa aos números e acessá-los por índice.

A função addCompany nos permite escolher o nome da empresa e inicializar a nova struct Company, então ela é vinculada ao seu índice por mapeamento. (aliás, quando a nova struct é inicializada, uint256 employeeIndex é 0 e a matriz de funcionários é — valores padrão para esses tipos — não precisamos fornecer valores a eles, mas podemos, por exemplo, inicializar uma matriz vazia — Company memory _company = Company('CompanyA',0, new string[](0));)

A última função addEmployee nos fornece um método para adicionar o nome do funcionário à matriz funcionários dentro da empresa escolhida e também aumentar o employeeIndex dentro da estrutura dessa empresa.

Portanto, quando normalmente queremos retornar o mapeamento público, há um getter pronto para nós.

Aqui está um script simples em Brownie (python) para testar o que esse mapeamento nos retornará.

Image description

O nome foi retornado corretamente, o employeeIndex também está correto, mas onde está a matriz?

Isso é de propósito. Matrizes não são retornadas por valor de getters. Em vez disso, o acesso ao índice é fornecido para eles. Como não é possível para structs, decidimos descartar essas matrizes. Infelizmente, você precisa implementar sua própria função getter se quiser essa funcionalidade.

Aqui está uma informação do github do solidity sobre isso:

https://github.com/ethereum/solidity/issues/12792

Ok, então vamos implementar essa função getter, é simples:

Image description

Duas funções foram adicionadas, getEmployeesArray, que retorna toda a matriz de funcionários, e getEmployeesArrayElement, que permite escolher o elemento a ser retornado.

Ok, hora de verificar se realmente funciona.

Image description

Conseguimos. Os valores de retorno são exatamente o que esperávamos. Nosso trabalho está feito.

Confira meu twitter:

https://twitter.com/CryptiaKubix

Obrigado pelo seu tempo, siga-me se você achar o artigo interessante. Tem perguntas? Elogie e eu vou respondê-los.

Este artigo foi escrito por LastFerbbs, e traduzido por Arnaldo Campos. Seu original pode ser lido aqui.

Oldest comments (0)