Lição 4

Реализация синтетического контракта на активы в Remix IDE

В этом уроке мы расширим наш контракт SyntheticAsset.sol, добавив функциональные возможности для майнинга и погашения синтетических активов. Эти операции имеют решающее значение для функционирования синтетических активов в реальном мире. Давайте разберем код, чтобы понять, как реализованы эти функции.

Продление контракта

Solidity
// Добавьте эти переменные состояния в Ваш контракт
mapping(address => uint256) public syntheticBalance;
uint256 public totalSyntheticSupply;

В приведенном выше фрагменте:

  • syntheticBalance - это отображение, которое отслеживает баланс синтетических активов для каждого адреса.
  • totalSyntheticSupply - это переменная, которая отслеживает общее предложение синтетических активов в обращении.
Solidity
// Обновление функции mintSyntheticAsset
function mintSyntheticAsset(uint256 _amount) public {
    require(collateral >= _amount, "Insufficient collateral");
    syntheticBalance[msg.sender] += _amount;
    totalSyntheticSupply += _amount;
    collateral -= _amount;
}

В функции mintSyntheticAsset:

  • Заявление о требовании проверяет, достаточно ли залогового обеспечения для чеканки запрашиваемой суммы синтетических активов.
  • Синтетический баланс вызывающей стороны(msg.sender) увеличивается на _сумму.
  • Общее количествоSyntheticSupply также увеличивается на _сумму.
  • Залог уменьшается на _сумму_ по мере того, как он используется для обеспечения вновь созданных синтетических активов.
Solidity
// Обновление функции redeemSyntheticAsset
function redeemSyntheticAsset(uint256 _amount) public {
    require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
    syntheticBalance[msg.sender] -= _amount;
    totalSyntheticSupply -= _amount;
    collateral += _amount;
}

В функции redeemSyntheticAsset:

  • Утверждение require проверяет, есть ли у звонящего достаточный баланс синтетических активов для погашения.
  • Синтетический баланс вызывающего уменьшается на _сумму_.
  • TotalSyntheticSupply уменьшается на _сумму.
  • Залог увеличивается на _сумму, поскольку он высвобождается обратно при выкупе синтетических активов.

Полный код

TypeScript
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SyntheticAsset {
 uint256 public underlyingAssetPrice;
 uint256 public collateral;
 address public owner;
 mapping(address => uint256) public syntheticBalance;
 uint256 public totalSyntheticSupply;

   constructor() {
        owner = msg.sender;
    }

    модификатор onlyOwner() {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    function updatePrice(uint256 _price) public onlyOwner {
        underlyingAssetPrice = _price;
    }

    function depositCollateral(uint256 _amount) public {
        collateral += _amount;
    }

    function withdrawCollateral(uint256 _amount) public {
        require(collateral >= _amount, "Insufficient collateral");
        collateral -= _amount;
    }

    function getSyntheticAssetPrice() public view returns (uint256) {
        return underlyingAssetPrice;
    }

    function mintSyntheticAsset(uint256 _amount) public {
        require(collateral >= _amount, "Insufficient collateral");
        syntheticBalance[msg.sender] += _amount;
        totalSyntheticSupply += _amount;
        collateral -= _amount;
    }

    function redeemSyntheticAsset(uint256 _amount) public {
        require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
        syntheticBalance[msg.sender] -= _amount;
        totalSyntheticSupply -= _amount;
        collateral += _amount;
    }
}

Подготовка: Приобретение эфира Testnet и настройка Вашей среды

Приобретение Testnet Ether

Чтобы развернуть контракты в Goerli Testnet, Вам понадобится Goerli ETH (GoerliETH). Хотя он не имеет никакой реальной ценности, он необходим для оплаты газа в тестовой сети.

  1. Метамаска: Убедитесь, что Ваша метамаска переключена на тестовую сеть Goerli.

  2. Подойдите к крану Goerli, чтобы попросить немного GoerliETH. Просто вставьте свой Ethereum-адрес Goerli Testnet, и вскоре Вы получите тестовый ETH.

Настройка Remix для развертывания Goerli Testnet

  1. В Remix перейдите на вкладку Deploy & Run Transactions.

  2. Для параметра Environment выберите Injected Provider. Эта опция позволяет Remix подключаться к любой сети, на которую в данный момент настроена Ваша Metamask, которая должна быть Goerli Testnet.

  3. Убедитесь, что Ваш контракт, OracleIntegratedContract, выбран в выпадающем списке Contract.

  4. В раскрывающемся меню " Счет " Вы должны увидеть Ваш адрес Goerli Testnet Ethereum.

Компиляция и развертывание расширенного контракта

Теперь, с обновленными функциональными возможностями, скомпилируйте и разверните Ваш контракт, следуя шагам из Урока 3.

Взаимодействие с расширенным контрактом

С расширенным контрактом:

  1. Вызовите функции mintSyntheticAsset и redeemSyntheticAsset с разными суммами для создания и погашения синтетических активов соответственно.

  2. Наблюдайте за изменениями в syntheticBalance, totalSyntheticSupply и обеспечении через интерфейс Remix IDE.

Наблюдение за поведением договора

Взаимодействуйте с контрактом и наблюдайте, как переменные состояния и общее состояние контракта изменяются в зависимости от Вашего взаимодействия. Этот практический опыт позволит закрепить концепции и операции с синтетическими активами.

По мере того, как мы обогащаем наш контракт основными функциональными возможностями, мы приближаемся к реалистичному контракту на синтетические активы. В следующем уроке мы сосредоточимся на тестировании этого контракта, чтобы убедиться, что он работает как положено в различных сценариях. Практическое понимание синтетических активов продолжает углубляться по мере нашего продвижения. Оставайтесь с нами, чтобы узнать больше о практическом обучении в следующем уроке!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
Catálogo
Lição 4

Реализация синтетического контракта на активы в Remix IDE

В этом уроке мы расширим наш контракт SyntheticAsset.sol, добавив функциональные возможности для майнинга и погашения синтетических активов. Эти операции имеют решающее значение для функционирования синтетических активов в реальном мире. Давайте разберем код, чтобы понять, как реализованы эти функции.

Продление контракта

Solidity
// Добавьте эти переменные состояния в Ваш контракт
mapping(address => uint256) public syntheticBalance;
uint256 public totalSyntheticSupply;

В приведенном выше фрагменте:

  • syntheticBalance - это отображение, которое отслеживает баланс синтетических активов для каждого адреса.
  • totalSyntheticSupply - это переменная, которая отслеживает общее предложение синтетических активов в обращении.
Solidity
// Обновление функции mintSyntheticAsset
function mintSyntheticAsset(uint256 _amount) public {
    require(collateral >= _amount, "Insufficient collateral");
    syntheticBalance[msg.sender] += _amount;
    totalSyntheticSupply += _amount;
    collateral -= _amount;
}

В функции mintSyntheticAsset:

  • Заявление о требовании проверяет, достаточно ли залогового обеспечения для чеканки запрашиваемой суммы синтетических активов.
  • Синтетический баланс вызывающей стороны(msg.sender) увеличивается на _сумму.
  • Общее количествоSyntheticSupply также увеличивается на _сумму.
  • Залог уменьшается на _сумму_ по мере того, как он используется для обеспечения вновь созданных синтетических активов.
Solidity
// Обновление функции redeemSyntheticAsset
function redeemSyntheticAsset(uint256 _amount) public {
    require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
    syntheticBalance[msg.sender] -= _amount;
    totalSyntheticSupply -= _amount;
    collateral += _amount;
}

В функции redeemSyntheticAsset:

  • Утверждение require проверяет, есть ли у звонящего достаточный баланс синтетических активов для погашения.
  • Синтетический баланс вызывающего уменьшается на _сумму_.
  • TotalSyntheticSupply уменьшается на _сумму.
  • Залог увеличивается на _сумму, поскольку он высвобождается обратно при выкупе синтетических активов.

Полный код

TypeScript
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SyntheticAsset {
 uint256 public underlyingAssetPrice;
 uint256 public collateral;
 address public owner;
 mapping(address => uint256) public syntheticBalance;
 uint256 public totalSyntheticSupply;

   constructor() {
        owner = msg.sender;
    }

    модификатор onlyOwner() {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    function updatePrice(uint256 _price) public onlyOwner {
        underlyingAssetPrice = _price;
    }

    function depositCollateral(uint256 _amount) public {
        collateral += _amount;
    }

    function withdrawCollateral(uint256 _amount) public {
        require(collateral >= _amount, "Insufficient collateral");
        collateral -= _amount;
    }

    function getSyntheticAssetPrice() public view returns (uint256) {
        return underlyingAssetPrice;
    }

    function mintSyntheticAsset(uint256 _amount) public {
        require(collateral >= _amount, "Insufficient collateral");
        syntheticBalance[msg.sender] += _amount;
        totalSyntheticSupply += _amount;
        collateral -= _amount;
    }

    function redeemSyntheticAsset(uint256 _amount) public {
        require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
        syntheticBalance[msg.sender] -= _amount;
        totalSyntheticSupply -= _amount;
        collateral += _amount;
    }
}

Подготовка: Приобретение эфира Testnet и настройка Вашей среды

Приобретение Testnet Ether

Чтобы развернуть контракты в Goerli Testnet, Вам понадобится Goerli ETH (GoerliETH). Хотя он не имеет никакой реальной ценности, он необходим для оплаты газа в тестовой сети.

  1. Метамаска: Убедитесь, что Ваша метамаска переключена на тестовую сеть Goerli.

  2. Подойдите к крану Goerli, чтобы попросить немного GoerliETH. Просто вставьте свой Ethereum-адрес Goerli Testnet, и вскоре Вы получите тестовый ETH.

Настройка Remix для развертывания Goerli Testnet

  1. В Remix перейдите на вкладку Deploy & Run Transactions.

  2. Для параметра Environment выберите Injected Provider. Эта опция позволяет Remix подключаться к любой сети, на которую в данный момент настроена Ваша Metamask, которая должна быть Goerli Testnet.

  3. Убедитесь, что Ваш контракт, OracleIntegratedContract, выбран в выпадающем списке Contract.

  4. В раскрывающемся меню " Счет " Вы должны увидеть Ваш адрес Goerli Testnet Ethereum.

Компиляция и развертывание расширенного контракта

Теперь, с обновленными функциональными возможностями, скомпилируйте и разверните Ваш контракт, следуя шагам из Урока 3.

Взаимодействие с расширенным контрактом

С расширенным контрактом:

  1. Вызовите функции mintSyntheticAsset и redeemSyntheticAsset с разными суммами для создания и погашения синтетических активов соответственно.

  2. Наблюдайте за изменениями в syntheticBalance, totalSyntheticSupply и обеспечении через интерфейс Remix IDE.

Наблюдение за поведением договора

Взаимодействуйте с контрактом и наблюдайте, как переменные состояния и общее состояние контракта изменяются в зависимости от Вашего взаимодействия. Этот практический опыт позволит закрепить концепции и операции с синтетическими активами.

По мере того, как мы обогащаем наш контракт основными функциональными возможностями, мы приближаемся к реалистичному контракту на синтетические активы. В следующем уроке мы сосредоточимся на тестировании этого контракта, чтобы убедиться, что он работает как положено в различных сценариях. Практическое понимание синтетических активов продолжает углубляться по мере нашего продвижения. Оставайтесь с нами, чтобы узнать больше о практическом обучении в следующем уроке!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa 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.