Solidity
// Додайте ці змінні стану до свого контракту
mapping(address => uint256) public syntheticBalance;
uint256 public totalSyntheticSupply;
У наведеному вище фрагменті:
syntheticBalance — це відображення, яке відстежує баланс синтетичних активів для кожної адреси.totalSyntheticSupply — це змінна, яка відстежує загальну пропозицію синтетичних активів в обігу.Solidity
// Оновлення функції mintSyntheticAsset
функція mintSyntheticAsset(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
У функції mintSyntheticAsset :
require перевіряє наявність достатньої застави для карбування запитаної кількості синтетичних активів.syntheticBalance абонента (msg.sender) збільшується на _amount.totalSyntheticSupply також збільшується на _amount.collateral зменшується на _amount , оскільки вона використовується для забезпечення новостворених синтетичних активів.Solidity
// Оновлення функції redeemSyntheticAsset
redeemSyntheticAsset(uint256 _amount) public {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
У функції redeemSyntheticAsset :
require перевіряє, чи має абонент достатній баланс синтетичних активів для викупу.syntheticBalance абонента зменшується на _amount.totalSyntheticSupply зменшено на _amount.collateral збільшується на _amount , оскільки вона повертається після викупу синтетичних активів.TypeScript
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
контракт SyntheticAsset {
uint256 public underlyingAssetPrice;
uint256 державна застава;
адреса державного власника;
відображення (адреса => uint256) public syntheticBalance;
uint256 public totalSyntheticSupply;
constructor() {
owner = msg.sender;
}
модифікатор onlyOwner() {
require(msg.sender == owner, "Not the contract owner");
_;
}
функція updatePrice(uint256 _price) public onlyOwner {
underlyingAssetPrice = _price;
}
функція depositCollateral(uint256 _amount) public {
collateral += _amount;
}
функція removeCollateral(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
collateral -= _amount;
}
функція getSyntheticAssetPrice() public view повертає (uint256) {
return underlyingAssetPrice;
}
функція mintSyntheticAsset(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
функція redeemSyntheticAsset(uint256 _amount) public {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
}

Щоб розгорнути контракти в Goerli Testnet, вам знадобиться Goerli ETH (GoerliETH). Хоча це не має реальної цінності, це важливо для сплати зборів за газ у тестовій мережі.
Метамаска: переконайтеся, що ваша метамаска переключена на тестову мережу Goerli.
Перейдіть до крана Goerli , щоб запросити GoerliETH. Просто вставте свою адресу Goerli Testnet Ethereum, і незабаром ви отримаєте тестовий ETH.

У Remix перейдіть на вкладку Deploy & Run Transactions .
Для опції Environment виберіть Injected Provider. Ця опція дозволяє Remix підключатися до будь-якої мережі, на яку зараз налаштовано ваш Metamask, якою має бути Goerli Testnet.
Переконайтеся, що ваш контракт, OracleIntegratedContract, вибрано у розкривному списку Contract .
У розкривному меню Account ви повинні побачити свою адресу Goerli Testnet Ethereum.
Тепер, маючи оновлені функції, скомпілюйте та розгорніть свій контракт, дотримуючись інструкцій з уроку 3.
З розгорнутим продовженим контрактом:
Викликайте функції mintSyntheticAsset і redeemSyntheticAsset із різними сумами для карбування та викупу синтетичних активів відповідно.
Спостерігайте за змінами в syntheticBalance, totalSyntheticSupply та collateral через інтерфейс Remix IDE.
Займайтеся контрактом і спостерігайте, як змінні стану та загальний стан контракту розвиваються разом із вашою взаємодією. Цей практичний досвід закріпить концепції та операції синтетичних активів.
Збагачуючи наш контракт основними функціями, ми наближаємося до реалістичного контракту на синтетичні активи. У наступному уроці ми зосередимося на тестуванні цього контракту, щоб переконатися, що він працює належним чином у різних сценаріях. Практичне розуміння синтетичних активів продовжує поглиблюватися в міру нашого прогресу. Залишайтеся з нами, щоб отримати більше практичного навчання на наступному уроці!