الدرس رقم 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.

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

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

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

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.
الكتالوج
الدرس رقم 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.

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

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

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

إخلاء المسؤولية
* ينطوي الاستثمار في العملات الرقمية على مخاطر كبيرة. فيرجى المتابعة بحذر. ولا تهدف الدورة التدريبية إلى تقديم المشورة الاستثمارية.
* تم إنشاء الدورة التدريبية من قبل المؤلف الذي انضم إلى مركز التعلّم في Gate. ويُرجى العلم أنّ أي رأي يشاركه المؤلف لا يمثّل مركز التعلّم في Gate.