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.
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)
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:
Implante seu contrato clicando no botão Deploy
.
Após a implantação, você verá o contrato representado em Contracts
. Clique nisso.
Agora você verá os pontos de entrada do contrato listados.
Para chamar replace
, insira um valor para params.value
no campo e clique no botão replace
.
Para ligar double
, basta clicar no botão double
.
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.
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!
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.
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)
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:
Implante seu contrato clicando no botão Deploy
.
Após a implantação, você verá o contrato representado em Contracts
. Clique nisso.
Agora você verá os pontos de entrada do contrato listados.
Para chamar replace
, insira um valor para params.value
no campo e clique no botão replace
.
Para ligar double
, basta clicar no botão double
.
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.
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!