ความแข็งแกร่ง
// เพิ่มตัวแปรสถานะเหล่านี้ลงในการแมปสัญญา
ของคุณ (ที่อยู่ => uint256) public SyntheticBalance;
uint256 สาธารณะรวมSyntheticSupply;
ในตัวอย่างด้านบน:
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
// อัปเดตฟังก์ชัน RedSyntheticAsset
ฟังก์ชั่น RedSyntheticAsset(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 ^0.8.0;
สัญญา SyntheticAsset {
uint256 สาธารณะที่อยู่ภายใต้AssetPrice;
uint256 หลักประกันสาธารณะ;
ที่อยู่สาธารณะเจ้าของ;
การทำแผนที่ (ที่อยู่ => uint256) สมดุลสังเคราะห์สาธารณะ;
uint256 สาธารณะ 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;
}
function withdrawCollateral(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
collateral -= _amount;
}
ฟังก์ชั่น getSyntheticAssetPrice() มุมมองสาธารณะส่งคืน (uint256) {
return underlyingAssetPrice;
}
ฟังก์ชั่น mintSyntheticAsset(uint256 _amount) สาธารณะ {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
ฟังก์ชั่น redSyntheticAsset(uint256 _amount) สาธารณะ {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
}
หากต้องการปรับใช้สัญญาบน Goerli Testnet คุณจะต้องมี Goerli ETH (GoerliETH) แม้ว่าจะไม่มีมูลค่าที่แท้จริง แต่ก็จำเป็นสำหรับการจ่ายค่าธรรมเนียมน้ำมันบนเทสเน็ต
Metamask: ตรวจสอบให้แน่ใจว่า Metamask ของคุณเปลี่ยนเป็น Goerli Test Network
ไปที่ Goerli faucet เพื่อขอ 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
ด้วยจำนวนที่แตกต่างกันเพื่อ Mint และแลกสินทรัพย์สังเคราะห์ตามลำดับ
สังเกตการเปลี่ยนแปลงใน syntheticBalance
, totalSyntheticSupply
และ collateral
ผ่านอินเทอร์เฟซ Remix IDE
มีส่วนร่วมกับสัญญาและสังเกตดูว่าตัวแปรสถานะและสถานะสัญญาโดยรวมมีวิวัฒนาการไปอย่างไรตามปฏิสัมพันธ์ของคุณ ประสบการณ์ตรงนี้จะเสริมสร้างแนวคิดและการดำเนินงานของสินทรัพย์สังเคราะห์
ในขณะที่เราปรับปรุงสัญญาของเราด้วยฟังก์ชันการทำงานที่จำเป็น เราก็เข้าใกล้สัญญาสินทรัพย์สังเคราะห์ที่สมจริงมากขึ้นอีก ในบทถัดไป เราจะเน้นที่การทดสอบสัญญานี้เพื่อให้แน่ใจว่าทำงานได้ตามที่ตั้งใจไว้ในสถานการณ์ต่างๆ ความเข้าใจเชิงปฏิบัติเกี่ยวกับสินทรัพย์สังเคราะห์ยังคงลึกซึ้งยิ่งขึ้นในขณะที่เราก้าวหน้า โปรดติดตามการเรียนรู้แบบลงมือปฏิบัติจริงเพิ่มเติมในบทเรียนที่กำลังจะมาถึง!
ความแข็งแกร่ง
// เพิ่มตัวแปรสถานะเหล่านี้ลงในการแมปสัญญา
ของคุณ (ที่อยู่ => uint256) public SyntheticBalance;
uint256 สาธารณะรวมSyntheticSupply;
ในตัวอย่างด้านบน:
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
// อัปเดตฟังก์ชัน RedSyntheticAsset
ฟังก์ชั่น RedSyntheticAsset(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 ^0.8.0;
สัญญา SyntheticAsset {
uint256 สาธารณะที่อยู่ภายใต้AssetPrice;
uint256 หลักประกันสาธารณะ;
ที่อยู่สาธารณะเจ้าของ;
การทำแผนที่ (ที่อยู่ => uint256) สมดุลสังเคราะห์สาธารณะ;
uint256 สาธารณะ 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;
}
function withdrawCollateral(uint256 _amount) public {
require(collateral >= _amount, "Insufficient collateral");
collateral -= _amount;
}
ฟังก์ชั่น getSyntheticAssetPrice() มุมมองสาธารณะส่งคืน (uint256) {
return underlyingAssetPrice;
}
ฟังก์ชั่น mintSyntheticAsset(uint256 _amount) สาธารณะ {
require(collateral >= _amount, "Insufficient collateral");
syntheticBalance[msg.sender] += _amount;
totalSyntheticSupply += _amount;
collateral -= _amount;
}
ฟังก์ชั่น redSyntheticAsset(uint256 _amount) สาธารณะ {
require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
syntheticBalance[msg.sender] -= _amount;
totalSyntheticSupply -= _amount;
collateral += _amount;
}
}
หากต้องการปรับใช้สัญญาบน Goerli Testnet คุณจะต้องมี Goerli ETH (GoerliETH) แม้ว่าจะไม่มีมูลค่าที่แท้จริง แต่ก็จำเป็นสำหรับการจ่ายค่าธรรมเนียมน้ำมันบนเทสเน็ต
Metamask: ตรวจสอบให้แน่ใจว่า Metamask ของคุณเปลี่ยนเป็น Goerli Test Network
ไปที่ Goerli faucet เพื่อขอ 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
ด้วยจำนวนที่แตกต่างกันเพื่อ Mint และแลกสินทรัพย์สังเคราะห์ตามลำดับ
สังเกตการเปลี่ยนแปลงใน syntheticBalance
, totalSyntheticSupply
และ collateral
ผ่านอินเทอร์เฟซ Remix IDE
มีส่วนร่วมกับสัญญาและสังเกตดูว่าตัวแปรสถานะและสถานะสัญญาโดยรวมมีวิวัฒนาการไปอย่างไรตามปฏิสัมพันธ์ของคุณ ประสบการณ์ตรงนี้จะเสริมสร้างแนวคิดและการดำเนินงานของสินทรัพย์สังเคราะห์
ในขณะที่เราปรับปรุงสัญญาของเราด้วยฟังก์ชันการทำงานที่จำเป็น เราก็เข้าใกล้สัญญาสินทรัพย์สังเคราะห์ที่สมจริงมากขึ้นอีก ในบทถัดไป เราจะเน้นที่การทดสอบสัญญานี้เพื่อให้แน่ใจว่าทำงานได้ตามที่ตั้งใจไว้ในสถานการณ์ต่างๆ ความเข้าใจเชิงปฏิบัติเกี่ยวกับสินทรัพย์สังเคราะห์ยังคงลึกซึ้งยิ่งขึ้นในขณะที่เราก้าวหน้า โปรดติดตามการเรียนรู้แบบลงมือปฏิบัติจริงเพิ่มเติมในบทเรียนที่กำลังจะมาถึง!