Lição 2

Armazenando Valores em um Contrato

Olá e bem-vindo de volta! Em nossa primeira lição, apresentamos SmartPy e Tezos criando um contrato inteligente muito básico. Nesta lição, vamos nos aprofundar em um dos componentes mais essenciais de qualquer contrato inteligente da Tezos: armazenamento.

O que é armazenamento?

Em um contrato inteligente da Tezos, o armazenamento é como a memória do contrato. Este é o local onde são guardados todos os dados relevantes para o contrato. Essencialmente, ele atua como o estado do nosso contrato, armazenando valores que persistem em diferentes transações e permitindo que o contrato inteligente “lembre” informações. É esta capacidade que nos permite construir aplicações descentralizadas complexas e envolventes na blockchain Tezos.

Compreendendo o armazenamento em profundidade

Antes de mergulharmos no código desta lição, vamos detalhar um pouco mais o conceito de armazenamento. O armazenamento de um contrato é o estado que persiste entre as chamadas de função. Se você tem experiência em programação tradicional, pode pensar nisso como o 'estado global' do contrato. É o que permite que os usuários tenham interações contínuas com um contrato ao longo do tempo.

Agora, vamos dar uma olhada em nosso código de contrato para esta lição:

Python 
 importar smartpy como sp 

 @sp.module 
 def main(): 
 class StoreValue(sp.Contract): 
 def __init__(self, valor): 
 self.data.storedValue = valor 

 @sp.entrypoint 
 def substituir(self, params): 
 self.data.storedValue = params.value 

 @sp.entrypoint 
 def double(self): 
 self.data.storedValue *= 2 

 @sp.entrypoint 
 def divide(self , params): 
 assert params.divisor > 5 
 self.data.storedValue /= params.divisor 


 se "modelos" não estiverem em __name__: 

 @sp.add_test(name="StoreValue") 
 def test() : 
 c1 = main.StoreValue(12) 
 cenário = sp.test_scenario(main)
        cenário.h1("Armazenar Valor") 
 cenário += c1 
 c1.replace(valor=15) 
 cenário.p("Alguns computação").show(c1.data.storedValue * 12) 
 c1.replace(value=25) 
 c1.double() 
 c1.divide(divisor=2).run(
            válido=Falso, exceção="Condição errada: params.divisor > 5" 
 ) 
 cenário.verify(c1.data.storedValue == 50) 
 c1.divide(divisor=6) 
 cenário.verify(c1.data.storedValue == 8)

Execute e decomponha o código

Em nosso exemplo de contrato de armazenamento, temos vários pontos de entrada – replace, double e divide. Depois de implantar este contrato, os usuários poderão ligar para esses pontos de entrada para interagir com o contrato.

Para os pontos de entrada replace e divide , os usuários devem fornecer parâmetros na transação. Para replace, é necessário um value de parâmetro e para divide, é necessário um divisor de parâmetro.

Ao executar este contrato no SmartPy IDE, no lado direito, você verá uma representação visual das operações e armazenamento do contrato. Na verdade, você pode simular as interações do usuário aqui. Aqui está um guia passo a passo:

  1. Implante seu contrato clicando no botão Deploy .

  2. Após a implantação, você verá o contrato representado em Contracts. Clique nisso.

  3. Agora você verá os pontos de entrada do contrato listados.

  4. Para chamar replace, insira um valor para params.value no campo e clique no botão replace .

  5. Para ligar double, basta clicar no botão double .

  6. Para chamar divide, insira um valor para params.divisor no campo e clique no botão divide .
    Cada uma dessas interações criará uma nova operação listada no contrato, e você poderá ver o estado atualizado do armazenamento do contrato após cada operação.

Neste contrato, enfatizamos o conceito de armazenamento com a linha self.data.storedValue = value. Aqui, self.data refere-se ao armazenamento do nosso contrato. É aqui que mantemos o estado do nosso contrato: um único parâmetro chamado storedValue.

Também temos vários pontos de entrada neste contrato. Os pontos de entrada são essencialmente funções públicas que permitem que partes externas interajam com o contrato. Aqui, nossos pontos de entrada permitem a modificação de storedValue de várias maneiras. Podemos substituí-lo por um novo valor, dobrá-lo ou dividi-lo por um determinado divisor.

A seguir, vamos considerar o cenário de teste que configuramos. Criamos uma instância do nosso contrato com o valor inicial 12 para storedValue. Em seguida, chamamos nossos pontos de entrada para modificar o valor de storedValue de várias maneiras e validar os resultados.

Por que o armazenamento é importante?

A capacidade de armazenar e atualizar valores no armazenamento de um contrato é fundamental para a construção de contratos inteligentes Tezos. Permite a persistência de dados em diferentes interações com o contrato. Seja mantendo os saldos em um contrato de token, armazenando informações do usuário em um aplicativo descentralizado ou mantendo o estado de um jogo no blockchain, o armazenamento é um recurso central que facilita essas funcionalidades.

O armazenamento em um contrato inteligente pode conter valores simples, como números inteiros, strings e booleanos, ou estruturas de dados mais complexas, como listas, mapas e objetos personalizados. Isso nos permite construir lógicas complexas e transições de estado em nossos contratos.

Na próxima lição, continuaremos a desenvolver esses conceitos básicos, introduzindo cálculos mais complexos em contratos inteligentes e começaremos a trabalhar com tipos de dados mais avançados no armazenamento do nosso contrato. Então fique atento e lembre-se: a prática leva à perfeição. Não hesite em experimentar o código, fazer modificações e observar os resultados!

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.
Catálogo
Lição 2

Armazenando Valores em um Contrato

Olá e bem-vindo de volta! Em nossa primeira lição, apresentamos SmartPy e Tezos criando um contrato inteligente muito básico. Nesta lição, vamos nos aprofundar em um dos componentes mais essenciais de qualquer contrato inteligente da Tezos: armazenamento.

O que é armazenamento?

Em um contrato inteligente da Tezos, o armazenamento é como a memória do contrato. Este é o local onde são guardados todos os dados relevantes para o contrato. Essencialmente, ele atua como o estado do nosso contrato, armazenando valores que persistem em diferentes transações e permitindo que o contrato inteligente “lembre” informações. É esta capacidade que nos permite construir aplicações descentralizadas complexas e envolventes na blockchain Tezos.

Compreendendo o armazenamento em profundidade

Antes de mergulharmos no código desta lição, vamos detalhar um pouco mais o conceito de armazenamento. O armazenamento de um contrato é o estado que persiste entre as chamadas de função. Se você tem experiência em programação tradicional, pode pensar nisso como o 'estado global' do contrato. É o que permite que os usuários tenham interações contínuas com um contrato ao longo do tempo.

Agora, vamos dar uma olhada em nosso código de contrato para esta lição:

Python 
 importar smartpy como sp 

 @sp.module 
 def main(): 
 class StoreValue(sp.Contract): 
 def __init__(self, valor): 
 self.data.storedValue = valor 

 @sp.entrypoint 
 def substituir(self, params): 
 self.data.storedValue = params.value 

 @sp.entrypoint 
 def double(self): 
 self.data.storedValue *= 2 

 @sp.entrypoint 
 def divide(self , params): 
 assert params.divisor > 5 
 self.data.storedValue /= params.divisor 


 se "modelos" não estiverem em __name__: 

 @sp.add_test(name="StoreValue") 
 def test() : 
 c1 = main.StoreValue(12) 
 cenário = sp.test_scenario(main)
        cenário.h1("Armazenar Valor") 
 cenário += c1 
 c1.replace(valor=15) 
 cenário.p("Alguns computação").show(c1.data.storedValue * 12) 
 c1.replace(value=25) 
 c1.double() 
 c1.divide(divisor=2).run(
            válido=Falso, exceção="Condição errada: params.divisor > 5" 
 ) 
 cenário.verify(c1.data.storedValue == 50) 
 c1.divide(divisor=6) 
 cenário.verify(c1.data.storedValue == 8)

Execute e decomponha o código

Em nosso exemplo de contrato de armazenamento, temos vários pontos de entrada – replace, double e divide. Depois de implantar este contrato, os usuários poderão ligar para esses pontos de entrada para interagir com o contrato.

Para os pontos de entrada replace e divide , os usuários devem fornecer parâmetros na transação. Para replace, é necessário um value de parâmetro e para divide, é necessário um divisor de parâmetro.

Ao executar este contrato no SmartPy IDE, no lado direito, você verá uma representação visual das operações e armazenamento do contrato. Na verdade, você pode simular as interações do usuário aqui. Aqui está um guia passo a passo:

  1. Implante seu contrato clicando no botão Deploy .

  2. Após a implantação, você verá o contrato representado em Contracts. Clique nisso.

  3. Agora você verá os pontos de entrada do contrato listados.

  4. Para chamar replace, insira um valor para params.value no campo e clique no botão replace .

  5. Para ligar double, basta clicar no botão double .

  6. Para chamar divide, insira um valor para params.divisor no campo e clique no botão divide .
    Cada uma dessas interações criará uma nova operação listada no contrato, e você poderá ver o estado atualizado do armazenamento do contrato após cada operação.

Neste contrato, enfatizamos o conceito de armazenamento com a linha self.data.storedValue = value. Aqui, self.data refere-se ao armazenamento do nosso contrato. É aqui que mantemos o estado do nosso contrato: um único parâmetro chamado storedValue.

Também temos vários pontos de entrada neste contrato. Os pontos de entrada são essencialmente funções públicas que permitem que partes externas interajam com o contrato. Aqui, nossos pontos de entrada permitem a modificação de storedValue de várias maneiras. Podemos substituí-lo por um novo valor, dobrá-lo ou dividi-lo por um determinado divisor.

A seguir, vamos considerar o cenário de teste que configuramos. Criamos uma instância do nosso contrato com o valor inicial 12 para storedValue. Em seguida, chamamos nossos pontos de entrada para modificar o valor de storedValue de várias maneiras e validar os resultados.

Por que o armazenamento é importante?

A capacidade de armazenar e atualizar valores no armazenamento de um contrato é fundamental para a construção de contratos inteligentes Tezos. Permite a persistência de dados em diferentes interações com o contrato. Seja mantendo os saldos em um contrato de token, armazenando informações do usuário em um aplicativo descentralizado ou mantendo o estado de um jogo no blockchain, o armazenamento é um recurso central que facilita essas funcionalidades.

O armazenamento em um contrato inteligente pode conter valores simples, como números inteiros, strings e booleanos, ou estruturas de dados mais complexas, como listas, mapas e objetos personalizados. Isso nos permite construir lógicas complexas e transições de estado em nossos contratos.

Na próxima lição, continuaremos a desenvolver esses conceitos básicos, introduzindo cálculos mais complexos em contratos inteligentes e começaremos a trabalhar com tipos de dados mais avançados no armazenamento do nosso contrato. Então fique atento e lembre-se: a prática leva à perfeição. Não hesite em experimentar o código, fazer modificações e observar os resultados!

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.