Lição 4

Implementando um contrato de ativo sintético no Remix IDE

Nesta lição, expandiremos nosso contrato SyntheticAsset.sol adicionando funcionalidades para cunhagem e resgate de ativos sintéticos. Estas operações são cruciais para o funcionamento dos ativos sintéticos num cenário do mundo real. Vamos dissecar o código para entender como essas funcionalidades são implementadas.

Estendendo o Contrato

Solidity 
 // Adicione essas variáveis de estado ao seu contrato 
 mapeamento(address => uint256) public SyntheticBalance; 
 uint256 público totalSyntheticSupply;

No trecho acima:

  • syntheticBalance é um mapeamento que acompanha o saldo dos ativos sintéticos para cada endereço.
  • totalSyntheticSupply é uma variável que acompanha a oferta total de ativos sintéticos em circulação.
Solidez 
 // Atualizar mintSyntheticAsset function 
 function mintSyntheticAsset(uint256 _amount) public {
    require(collateral >= _amount, "Insufficient collateral");
    syntheticBalance[msg.sender] += _amount;
    totalSyntheticSupply += _amount;
    collateral -= _amount;
}

Na função mintSyntheticAsset :

  • Uma declaração require verifica se há garantias suficientes para cunhar a quantidade solicitada de ativos sintéticos.
  • O syntheticBalance do chamador (msg.sender) é aumentado em _amount.
  • O totalSyntheticSupply também é aumentado em _amount.
  • A collateral é reduzida em _amount , uma vez que é utilizada para garantir os activos sintéticos recentemente emitidos.
Solidez 
 // Atualizar redeemSyntheticAsset function 
 function redeemSyntheticAsset(uint256 _amount) public {
    require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
    syntheticBalance[msg.sender] -= _amount;
    totalSyntheticSupply -= _amount;
    collateral += _amount;
}

Na função redeemSyntheticAsset :

  • Uma instrução require verifica se o chamador tem saldo suficiente de ativos sintéticos para resgatar.
  • O syntheticBalance do chamador é diminuído em _amount.
  • O totalSyntheticSupply é diminuído em _amount.
  • A collateral é aumentada em _amount à medida que é liberada no resgate de ativos sintéticos.

O código completo

TypeScript 
 // Identificador de licença SPDX: solidez do pragma do MIT 
 ^0.8.0; 

 contrato SyntheticAsset { 
 uint256 public subjacenteAssetPrice; 
 uint256 garantias públicas; 
 endereço proprietário público; 
 mapeamento (endereço => uint256) público sintéticoBalance; 
 uint256 público totalSyntheticSupply; 

 construtor() {
        owner = msg.sender;
    }

    modificador onlyOwner() {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    função updatePrice(uint256 _price) public onlyOwner {
        underlyingAssetPrice = _price;
    }

    função depositCollateral(uint256 _amount) public {
        collateral += _amount;
    }

    função retirarCollateral(uint256 _amount) public {
        require(collateral >= _amount, "Insufficient collateral");
        collateral -= _amount;
    }

    função getSyntheticAssetPrice() retornos de visualização pública (uint256) {
        return underlyingAssetPrice;
    }

    função mintSyntheticAsset (uint256 _amount) público {
        require(collateral >= _amount, "Insufficient collateral");
        syntheticBalance[msg.sender] += _amount;
        totalSyntheticSupply += _amount;
        collateral -= _amount;
    }

    função redeemSyntheticAsset (uint256 _amount) público {
        require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
        syntheticBalance[msg.sender] -= _amount;
        totalSyntheticSupply -= _amount;
        collateral += _amount;
    }
}

Preparação: Adquirindo Testnet Ether e configurando seu ambiente

Adquirindo Testnet Ether

Para implantar contratos no Goerli Testnet, você precisará do Goerli ETH (GoerliETH). Embora não tenha nenhum valor real, é essencial para pagar taxas de gás na testnet.

  1. Metamask: Certifique-se de que seu Metamask esteja migrado para a Goerli Test Network.

  2. Vá até a torneira Goerli para solicitar um pouco de GoerliETH. Basta colar seu endereço Goerli Testnet Ethereum e você receberá o ETH de teste em breve.

Configurando o Remix para implantação do Goerli Testnet

  1. No Remix, navegue até a guia Deploy & Run Transactions .

  2. Para a opção Environment , selecione Injected Provider. Esta opção permite que o Remix se conecte a qualquer rede para a qual seu Metamask esteja atualmente configurado, que deve ser Goerli Testnet.

  3. Certifique-se de que seu contrato, OracleIntegratedContract, esteja selecionado no menu suspenso Contract .

  4. No menu suspenso Account , você deverá ver seu endereço Goerli Testnet Ethereum.

Compilando e implantando o contrato estendido

Agora com as funcionalidades atualizadas implementadas, compile e implemente seu contrato seguindo as etapas da Lição 3.

Interagindo com o Contrato Estendido

Com o contrato estendido implantado:

  1. Chame as funções mintSyntheticAsset e redeemSyntheticAsset com valores diferentes para cunhar e resgatar ativos sintéticos, respectivamente.

  2. Observe as alterações em syntheticBalance, totalSyntheticSupply e collateral por meio da interface Remix IDE.

Observando o comportamento do contrato

Envolva-se com o contrato e observe como as variáveis de estado e o estado geral do contrato evoluem com suas interações. Esta experiência prática solidificará os conceitos e operações de ativos sintéticos.

À medida que enriquecemos o nosso contrato com funcionalidades essenciais, aproximamo-nos cada vez mais de um contrato realista de ativos sintéticos. Na próxima lição, nos concentraremos em testar esse contrato para garantir que ele funcione conforme planejado em vários cenários. A compreensão prática dos activos sintéticos continua a aprofundar-se à medida que avançamos. Fique ligado para mais aprendizado prático na próxima lição!

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 4

Implementando um contrato de ativo sintético no Remix IDE

Nesta lição, expandiremos nosso contrato SyntheticAsset.sol adicionando funcionalidades para cunhagem e resgate de ativos sintéticos. Estas operações são cruciais para o funcionamento dos ativos sintéticos num cenário do mundo real. Vamos dissecar o código para entender como essas funcionalidades são implementadas.

Estendendo o Contrato

Solidity 
 // Adicione essas variáveis de estado ao seu contrato 
 mapeamento(address => uint256) public SyntheticBalance; 
 uint256 público totalSyntheticSupply;

No trecho acima:

  • syntheticBalance é um mapeamento que acompanha o saldo dos ativos sintéticos para cada endereço.
  • totalSyntheticSupply é uma variável que acompanha a oferta total de ativos sintéticos em circulação.
Solidez 
 // Atualizar mintSyntheticAsset function 
 function mintSyntheticAsset(uint256 _amount) public {
    require(collateral >= _amount, "Insufficient collateral");
    syntheticBalance[msg.sender] += _amount;
    totalSyntheticSupply += _amount;
    collateral -= _amount;
}

Na função mintSyntheticAsset :

  • Uma declaração require verifica se há garantias suficientes para cunhar a quantidade solicitada de ativos sintéticos.
  • O syntheticBalance do chamador (msg.sender) é aumentado em _amount.
  • O totalSyntheticSupply também é aumentado em _amount.
  • A collateral é reduzida em _amount , uma vez que é utilizada para garantir os activos sintéticos recentemente emitidos.
Solidez 
 // Atualizar redeemSyntheticAsset function 
 function redeemSyntheticAsset(uint256 _amount) public {
    require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
    syntheticBalance[msg.sender] -= _amount;
    totalSyntheticSupply -= _amount;
    collateral += _amount;
}

Na função redeemSyntheticAsset :

  • Uma instrução require verifica se o chamador tem saldo suficiente de ativos sintéticos para resgatar.
  • O syntheticBalance do chamador é diminuído em _amount.
  • O totalSyntheticSupply é diminuído em _amount.
  • A collateral é aumentada em _amount à medida que é liberada no resgate de ativos sintéticos.

O código completo

TypeScript 
 // Identificador de licença SPDX: solidez do pragma do MIT 
 ^0.8.0; 

 contrato SyntheticAsset { 
 uint256 public subjacenteAssetPrice; 
 uint256 garantias públicas; 
 endereço proprietário público; 
 mapeamento (endereço => uint256) público sintéticoBalance; 
 uint256 público totalSyntheticSupply; 

 construtor() {
        owner = msg.sender;
    }

    modificador onlyOwner() {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    função updatePrice(uint256 _price) public onlyOwner {
        underlyingAssetPrice = _price;
    }

    função depositCollateral(uint256 _amount) public {
        collateral += _amount;
    }

    função retirarCollateral(uint256 _amount) public {
        require(collateral >= _amount, "Insufficient collateral");
        collateral -= _amount;
    }

    função getSyntheticAssetPrice() retornos de visualização pública (uint256) {
        return underlyingAssetPrice;
    }

    função mintSyntheticAsset (uint256 _amount) público {
        require(collateral >= _amount, "Insufficient collateral");
        syntheticBalance[msg.sender] += _amount;
        totalSyntheticSupply += _amount;
        collateral -= _amount;
    }

    função redeemSyntheticAsset (uint256 _amount) público {
        require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
        syntheticBalance[msg.sender] -= _amount;
        totalSyntheticSupply -= _amount;
        collateral += _amount;
    }
}

Preparação: Adquirindo Testnet Ether e configurando seu ambiente

Adquirindo Testnet Ether

Para implantar contratos no Goerli Testnet, você precisará do Goerli ETH (GoerliETH). Embora não tenha nenhum valor real, é essencial para pagar taxas de gás na testnet.

  1. Metamask: Certifique-se de que seu Metamask esteja migrado para a Goerli Test Network.

  2. Vá até a torneira Goerli para solicitar um pouco de GoerliETH. Basta colar seu endereço Goerli Testnet Ethereum e você receberá o ETH de teste em breve.

Configurando o Remix para implantação do Goerli Testnet

  1. No Remix, navegue até a guia Deploy & Run Transactions .

  2. Para a opção Environment , selecione Injected Provider. Esta opção permite que o Remix se conecte a qualquer rede para a qual seu Metamask esteja atualmente configurado, que deve ser Goerli Testnet.

  3. Certifique-se de que seu contrato, OracleIntegratedContract, esteja selecionado no menu suspenso Contract .

  4. No menu suspenso Account , você deverá ver seu endereço Goerli Testnet Ethereum.

Compilando e implantando o contrato estendido

Agora com as funcionalidades atualizadas implementadas, compile e implemente seu contrato seguindo as etapas da Lição 3.

Interagindo com o Contrato Estendido

Com o contrato estendido implantado:

  1. Chame as funções mintSyntheticAsset e redeemSyntheticAsset com valores diferentes para cunhar e resgatar ativos sintéticos, respectivamente.

  2. Observe as alterações em syntheticBalance, totalSyntheticSupply e collateral por meio da interface Remix IDE.

Observando o comportamento do contrato

Envolva-se com o contrato e observe como as variáveis de estado e o estado geral do contrato evoluem com suas interações. Esta experiência prática solidificará os conceitos e operações de ativos sintéticos.

À medida que enriquecemos o nosso contrato com funcionalidades essenciais, aproximamo-nos cada vez mais de um contrato realista de ativos sintéticos. Na próxima lição, nos concentraremos em testar esse contrato para garantir que ele funcione conforme planejado em vários cenários. A compreensão prática dos activos sintéticos continua a aprofundar-se à medida que avançamos. Fique ligado para mais aprendizado prático na próxima lição!

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 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.