Olá! Bem-vindo à nossa décima segunda aula sobre Web3.js v4.x. Nesta aula, vamos explorar como criar transações complexas enviando dados mais estruturados para contratos inteligentes, incluindo Structs, Enums e Arrays. Este conhecimento permitirá que você desenvolva aplicações mais interativas e sofisticadas, enviando dados ricos e organizados para a blockchain de maneira eficiente.
- Preparando o contrato para receber Structs, Enums e Arrays
- Criando e enviando transações com Structs
- Lidando com Enums em transações
- Envio de Arrays
Para que possamos enviar dados complexos, precisamos garantir que o contrato inteligente em Solidity está preparado para receber esses tipos de dados. Vamos ver um exemplo de contrato que aceita Structs, Enums e Arrays em uma única função.
Para enviar dados para um struct
, você precisa passar cada atributo do struct
como um parâmetro na função.
- Compilar contrato
forge create aula8/complex.sol:Complex --private-key 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 --root .
Para enviar um valor de enum
, usamos o índice que representa o valor do enum
. Em Solidity, enums começam no índice 0. No exemplo anterior:
0
representaPending
1
representaShipped
2
representaDelivered
Ao enviar o valor status = 1
no exemplo, estamos especificando que o pedido está no status Shipped
.
Arrays podem ser enviados diretamente, contanto que o contrato Solidity esteja configurado para recebê-los como memory
. No exemplo placeOrder
, passamos um array de endereços para o parâmetro recipients
.
Hoje aprendemos a enviar transações complexas para contratos inteligentes usando Web3.js. Exploramos como manipular e enviar dados estruturados como Structs, Enums e Arrays, permitindo que aplicações descentralizadas transmitam dados ricos e organizados para a blockchain. Com isso, você pode criar interações avançadas e dinâmicas entre os usuários e os contratos.
- Preparação do contrato: Como configurar o contrato para receber Structs, Enums e Arrays.
- Envio de Structs: Passo a passo para enviar cada atributo do struct.
- Envio de Enums: Como mapear e enviar valores de Enum.
- Envio de Arrays: Enviando listas de dados e arrays multidimensionais.
- Fácil: Crie uma função de contrato que aceite um
struct
com três campos e envie uma transação para ele. - Médio: Envie um array aninhado para o contrato.
- Difícil: Envie um array de
structs
para um contrato, onde cada struct possui pelo menos três campos diferentes.
Na próxima aula, vamos iniciar o Módulo 3, onde exploraremos Como ler dados complexos do contrato. Nos vemos lá!