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.
Займайтеся контрактом і спостерігайте, як змінні стану та загальний стан контракту розвиваються разом із вашою взаємодією. Цей практичний досвід закріпить концепції та операції синтетичних активів.
Збагачуючи наш контракт основними функціями, ми наближаємося до реалістичного контракту на синтетичні активи. У наступному уроці ми зосередимося на тестуванні цього контракту, щоб переконатися, що він працює належним чином у різних сценаріях. Практичне розуміння синтетичних активів продовжує поглиблюватися в міру нашого прогресу. Залишайтеся з нами, щоб отримати більше практичного навчання на наступному уроці!
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.
Займайтеся контрактом і спостерігайте, як змінні стану та загальний стан контракту розвиваються разом із вашою взаємодією. Цей практичний досвід закріпить концепції та операції синтетичних активів.
Збагачуючи наш контракт основними функціями, ми наближаємося до реалістичного контракту на синтетичні активи. У наступному уроці ми зосередимося на тестуванні цього контракту, щоб переконатися, що він працює належним чином у різних сценаріях. Практичне розуміння синтетичних активів продовжує поглиблюватися в міру нашого прогресу. Залишайтеся з нами, щоб отримати більше практичного навчання на наступному уроці!