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;
}
}
Чтобы развернуть контракты в Goerli Testnet, Вам понадобится Goerli ETH (GoerliETH). Хотя он не имеет никакой реальной ценности, он необходим для оплаты газа в тестовой сети.
Метамаска: Убедитесь, что Ваша метамаска переключена на тестовую сеть Goerli.
Подойдите к крану Goerli, чтобы попросить немного GoerliETH. Просто вставьте свой Ethereum-адрес Goerli Testnet, и вскоре Вы получите тестовый ETH.
В Remix перейдите на вкладку Deploy & Run Transactions
.
Для параметра Environment
выберите Injected Provider
. Эта опция позволяет Remix подключаться к любой сети, на которую в данный момент настроена Ваша Metamask, которая должна быть Goerli Testnet.
Убедитесь, что Ваш контракт, OracleIntegratedContract
, выбран в выпадающем списке Contract
.
В раскрывающемся меню " Счет
" Вы должны увидеть Ваш адрес Goerli Testnet Ethereum.
Теперь, с обновленными функциональными возможностями, скомпилируйте и разверните Ваш контракт, следуя шагам из Урока 3.
С расширенным контрактом:
Вызовите функции mintSyntheticAsset
и redeemSyntheticAsset
с разными суммами для создания и погашения синтетических активов соответственно.
Наблюдайте за изменениями в syntheticBalance
, totalSyntheticSupply
и обеспечении
через интерфейс Remix IDE.
Взаимодействуйте с контрактом и наблюдайте, как переменные состояния и общее состояние контракта изменяются в зависимости от Вашего взаимодействия. Этот практический опыт позволит закрепить концепции и операции с синтетическими активами.
По мере того, как мы обогащаем наш контракт основными функциональными возможностями, мы приближаемся к реалистичному контракту на синтетические активы. В следующем уроке мы сосредоточимся на тестировании этого контракта, чтобы убедиться, что он работает как положено в различных сценариях. Практическое понимание синтетических активов продолжает углубляться по мере нашего продвижения. Оставайтесь с нами, чтобы узнать больше о практическом обучении в следующем уроке!
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;
}
}
Чтобы развернуть контракты в Goerli Testnet, Вам понадобится Goerli ETH (GoerliETH). Хотя он не имеет никакой реальной ценности, он необходим для оплаты газа в тестовой сети.
Метамаска: Убедитесь, что Ваша метамаска переключена на тестовую сеть Goerli.
Подойдите к крану Goerli, чтобы попросить немного GoerliETH. Просто вставьте свой Ethereum-адрес Goerli Testnet, и вскоре Вы получите тестовый ETH.
В Remix перейдите на вкладку Deploy & Run Transactions
.
Для параметра Environment
выберите Injected Provider
. Эта опция позволяет Remix подключаться к любой сети, на которую в данный момент настроена Ваша Metamask, которая должна быть Goerli Testnet.
Убедитесь, что Ваш контракт, OracleIntegratedContract
, выбран в выпадающем списке Contract
.
В раскрывающемся меню " Счет
" Вы должны увидеть Ваш адрес Goerli Testnet Ethereum.
Теперь, с обновленными функциональными возможностями, скомпилируйте и разверните Ваш контракт, следуя шагам из Урока 3.
С расширенным контрактом:
Вызовите функции mintSyntheticAsset
и redeemSyntheticAsset
с разными суммами для создания и погашения синтетических активов соответственно.
Наблюдайте за изменениями в syntheticBalance
, totalSyntheticSupply
и обеспечении
через интерфейс Remix IDE.
Взаимодействуйте с контрактом и наблюдайте, как переменные состояния и общее состояние контракта изменяются в зависимости от Вашего взаимодействия. Этот практический опыт позволит закрепить концепции и операции с синтетическими активами.
По мере того, как мы обогащаем наш контракт основными функциональными возможностями, мы приближаемся к реалистичному контракту на синтетические активы. В следующем уроке мы сосредоточимся на тестировании этого контракта, чтобы убедиться, что он работает как положено в различных сценариях. Практическое понимание синтетических активов продолжает углубляться по мере нашего продвижения. Оставайтесь с нами, чтобы узнать больше о практическом обучении в следующем уроке!