Lição 4

การใช้สัญญาสินทรัพย์สังเคราะห์ใน Remix IDE

ในบทนี้ เราจะขยายสัญญา SyntheticAsset.sol ของเราโดยการเพิ่มฟังก์ชันสำหรับการสร้างและแลกสินทรัพย์สังเคราะห์ การดำเนินการเหล่านี้มีความสำคัญอย่างยิ่งต่อการทำงานของสินทรัพย์สังเคราะห์ในสถานการณ์จริง เรามาวิเคราะห์โค้ดเพื่อทำความเข้าใจว่าฟังก์ชันเหล่านี้ถูกนำไปใช้อย่างไร

การขยายสัญญา

ความแข็งแกร่ง 
 // เพิ่มตัวแปรสถานะเหล่านี้ลงในการแมปสัญญา 
 ของคุณ (ที่อยู่ => 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;
    }
}

การเตรียมการ: การรับ Testnet Ether และการตั้งค่าสภาพแวดล้อมของคุณ

การรับ Testnet Ether

หากต้องการปรับใช้สัญญาบน Goerli Testnet คุณจะต้องมี Goerli ETH (GoerliETH) แม้ว่าจะไม่มีมูลค่าที่แท้จริง แต่ก็จำเป็นสำหรับการจ่ายค่าธรรมเนียมน้ำมันบนเทสเน็ต

  1. Metamask: ตรวจสอบให้แน่ใจว่า Metamask ของคุณเปลี่ยนเป็น Goerli Test Network

  2. ไปที่ Goerli faucet เพื่อขอ GoerliETH เพียงวางที่อยู่ Goerli Testnet Ethereum ของคุณ และคุณควรจะได้รับ ETH ทดสอบในไม่ช้า

การกำหนดค่า Remix สำหรับการปรับใช้ Goerli Testnet

  1. ใน Remix ให้ไปที่แท็บ Deploy & Run Transactions

  2. สำหรับตัวเลือก Environment ให้เลือก Injected Provider ตัวเลือกนี้อนุญาตให้ Remix เชื่อมต่อกับเครือข่ายใด ๆ ที่คุณตั้งค่า Metamask ไว้ในปัจจุบัน ซึ่งควรเป็น Goerli Testnet

  3. ตรวจสอบให้แน่ใจว่าสัญญาของคุณ OracleIntegratedContract ถูกเลือกไว้ในดรอปดาวน์ Contract

  4. สำหรับเมนูแบบเลื่อนลง Account คุณควรเห็นที่อยู่ Goerli Testnet Ethereum ของคุณ

การรวบรวมและการปรับใช้สัญญาเพิ่มเติม

ขณะนี้มีฟังก์ชันที่อัปเดตแล้ว ให้คอมไพล์และปรับใช้สัญญาของคุณโดยทำตามขั้นตอนจากบทที่ 3

การโต้ตอบกับสัญญาเพิ่มเติม

เมื่อมีการใช้สัญญาขยายเวลา:

  1. เรียกฟังก์ชัน mintSyntheticAsset และ redeemSyntheticAsset ด้วยจำนวนที่แตกต่างกันเพื่อ Mint และแลกสินทรัพย์สังเคราะห์ตามลำดับ

  2. สังเกตการเปลี่ยนแปลงใน syntheticBalance, totalSyntheticSupply และ collateral ผ่านอินเทอร์เฟซ Remix IDE

การสังเกตพฤติกรรมของสัญญา

มีส่วนร่วมกับสัญญาและสังเกตดูว่าตัวแปรสถานะและสถานะสัญญาโดยรวมมีวิวัฒนาการไปอย่างไรตามปฏิสัมพันธ์ของคุณ ประสบการณ์ตรงนี้จะเสริมสร้างแนวคิดและการดำเนินงานของสินทรัพย์สังเคราะห์

ในขณะที่เราปรับปรุงสัญญาของเราด้วยฟังก์ชันการทำงานที่จำเป็น เราก็เข้าใกล้สัญญาสินทรัพย์สังเคราะห์ที่สมจริงมากขึ้นอีก ในบทถัดไป เราจะเน้นที่การทดสอบสัญญานี้เพื่อให้แน่ใจว่าทำงานได้ตามที่ตั้งใจไว้ในสถานการณ์ต่างๆ ความเข้าใจเชิงปฏิบัติเกี่ยวกับสินทรัพย์สังเคราะห์ยังคงลึกซึ้งยิ่งขึ้นในขณะที่เราก้าวหน้า โปรดติดตามการเรียนรู้แบบลงมือปฏิบัติจริงเพิ่มเติมในบทเรียนที่กำลังจะมาถึง!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.
Catálogo
Lição 4

การใช้สัญญาสินทรัพย์สังเคราะห์ใน Remix IDE

ในบทนี้ เราจะขยายสัญญา SyntheticAsset.sol ของเราโดยการเพิ่มฟังก์ชันสำหรับการสร้างและแลกสินทรัพย์สังเคราะห์ การดำเนินการเหล่านี้มีความสำคัญอย่างยิ่งต่อการทำงานของสินทรัพย์สังเคราะห์ในสถานการณ์จริง เรามาวิเคราะห์โค้ดเพื่อทำความเข้าใจว่าฟังก์ชันเหล่านี้ถูกนำไปใช้อย่างไร

การขยายสัญญา

ความแข็งแกร่ง 
 // เพิ่มตัวแปรสถานะเหล่านี้ลงในการแมปสัญญา 
 ของคุณ (ที่อยู่ => 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;
    }
}

การเตรียมการ: การรับ Testnet Ether และการตั้งค่าสภาพแวดล้อมของคุณ

การรับ Testnet Ether

หากต้องการปรับใช้สัญญาบน Goerli Testnet คุณจะต้องมี Goerli ETH (GoerliETH) แม้ว่าจะไม่มีมูลค่าที่แท้จริง แต่ก็จำเป็นสำหรับการจ่ายค่าธรรมเนียมน้ำมันบนเทสเน็ต

  1. Metamask: ตรวจสอบให้แน่ใจว่า Metamask ของคุณเปลี่ยนเป็น Goerli Test Network

  2. ไปที่ Goerli faucet เพื่อขอ GoerliETH เพียงวางที่อยู่ Goerli Testnet Ethereum ของคุณ และคุณควรจะได้รับ ETH ทดสอบในไม่ช้า

การกำหนดค่า Remix สำหรับการปรับใช้ Goerli Testnet

  1. ใน Remix ให้ไปที่แท็บ Deploy & Run Transactions

  2. สำหรับตัวเลือก Environment ให้เลือก Injected Provider ตัวเลือกนี้อนุญาตให้ Remix เชื่อมต่อกับเครือข่ายใด ๆ ที่คุณตั้งค่า Metamask ไว้ในปัจจุบัน ซึ่งควรเป็น Goerli Testnet

  3. ตรวจสอบให้แน่ใจว่าสัญญาของคุณ OracleIntegratedContract ถูกเลือกไว้ในดรอปดาวน์ Contract

  4. สำหรับเมนูแบบเลื่อนลง Account คุณควรเห็นที่อยู่ Goerli Testnet Ethereum ของคุณ

การรวบรวมและการปรับใช้สัญญาเพิ่มเติม

ขณะนี้มีฟังก์ชันที่อัปเดตแล้ว ให้คอมไพล์และปรับใช้สัญญาของคุณโดยทำตามขั้นตอนจากบทที่ 3

การโต้ตอบกับสัญญาเพิ่มเติม

เมื่อมีการใช้สัญญาขยายเวลา:

  1. เรียกฟังก์ชัน mintSyntheticAsset และ redeemSyntheticAsset ด้วยจำนวนที่แตกต่างกันเพื่อ Mint และแลกสินทรัพย์สังเคราะห์ตามลำดับ

  2. สังเกตการเปลี่ยนแปลงใน syntheticBalance, totalSyntheticSupply และ collateral ผ่านอินเทอร์เฟซ Remix IDE

การสังเกตพฤติกรรมของสัญญา

มีส่วนร่วมกับสัญญาและสังเกตดูว่าตัวแปรสถานะและสถานะสัญญาโดยรวมมีวิวัฒนาการไปอย่างไรตามปฏิสัมพันธ์ของคุณ ประสบการณ์ตรงนี้จะเสริมสร้างแนวคิดและการดำเนินงานของสินทรัพย์สังเคราะห์

ในขณะที่เราปรับปรุงสัญญาของเราด้วยฟังก์ชันการทำงานที่จำเป็น เราก็เข้าใกล้สัญญาสินทรัพย์สังเคราะห์ที่สมจริงมากขึ้นอีก ในบทถัดไป เราจะเน้นที่การทดสอบสัญญานี้เพื่อให้แน่ใจว่าทำงานได้ตามที่ตั้งใจไว้ในสถานการณ์ต่างๆ ความเข้าใจเชิงปฏิบัติเกี่ยวกับสินทรัพย์สังเคราะห์ยังคงลึกซึ้งยิ่งขึ้นในขณะที่เราก้าวหน้า โปรดติดตามการเรียนรู้แบบลงมือปฏิบัติจริงเพิ่มเติมในบทเรียนที่กำลังจะมาถึง!

Exclusão de responsabilidade
* O investimento em criptomoedas envolve riscos significativos. Prossiga com cuidado. O curso não pretende ser um conselho de investimento.
* O curso é criado pelo autor que se juntou ao Gate Learn. Qualquer opinião partilhada pelo autor não representa o Gate Learn.