Lição 4

Remix IDE での合成アセットコントラクトの実装

このレッスンでは、合成資産の鋳造と償還のための機能を追加することで、SyntheticAsset.solコントラクトを拡張します。 これらの操作は、実際のシナリオで合成資産が機能するために重要です。 これらの機能がどのように実装されているかを理解するために、コードを詳しく見ていきましょう。

契約の延長

硬度
これらの状態変数をコントラクトに追加します
mapping(address => uint256) public syntheticBalance;
uint256 public totalSyntheticSupply;

上記のスニペットでは、次のようになります。

  • syntheticBalance は、各アドレスの合成資産の残高を追跡するマッピングです。
  • totalSyntheticSupply は、流通している合成資産の総供給量を追跡する変数です。
硬度
mintSyntheticAsset 関数を更新する
function mintSyntheticAsset(uint256 _amount) 公開 {
    require(collateral >= _amount, "Insufficient collateral");
    syntheticBalance[msg.sender] += _amount;
    totalSyntheticSupply += _amount;
    collateral -= _amount;
}

関数内では mintSyntheticAsset 、次のようになります。

  • ステートメントは require 、要求された量の合成資産を鋳造するのに十分な担保があるかどうかを確認します。
  • 呼び出し元 ()msg.sender の は syntheticBalance で増加_amountします。
  • また、 totalSyntheticSupply は によって _amount増加します。
  • 新しく鋳造された合成資産を裏付けるために使用されるため、減少しcollateral_amountます。
硬度
redeemSyntheticAsset 関数を更新する
function 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 します。

完全なコード

タイプスクリプト
SPDX-ライセンス識別子: MIT
プラグマの堅実さ^0.8.0;

コントラクト SyntheticAsset {
    uint256 public underlyingAssetPrice;
    uint256 公開担保
    公共の所有者に宛てます。
    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;
    }

関数 getSyntheticAssetPrice() public view returns (uint256) {
        return underlyingAssetPrice;
    }

function mintSyntheticAsset(uint256 _amount) 公開 {
        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 テストネットにコントラクトをデプロイするには、Goerli ETH (GoerliETH) が必要です。 実際の価値はありませんが、テストネットでガス料金を支払うために不可欠です。

  1. Metamask: MetamaskがGoerliテストネットワークに切り替わっていることを確認します。

  2. Goerli蛇口にアクセスして、GoerliETHをリクエストします。Goerliテストネットのイーサリアムアドレスを貼り付けるだけで、すぐにテストETHを受け取ることができます。

Goerli テストネット展開のための Remix の構成

  1. [Remix] Deploy & Run Transactions で、タブに移動します。

  2. Environmentオプションとして、 を選択しますInjected Provider。このオプションにより、RemixはMetamaskが現在設定されているネットワーク(Goerli Testnet)に接続できます。

  3. ドロップダウンでContract契約OracleIntegratedContractが選択されていることを確認します。

  4. Accountドロップダウンには、Goerli Testnet Ethereumアドレスが表示されます。

拡張コントラクトのコンパイルと展開

更新された機能を配置したので、レッスン 3 の手順に従ってコントラクトをコンパイルしてデプロイします。

拡張契約との対話

延長契約が展開されている場合:

  1. 異なる金額の呼び出し mintSyntheticAssetredeemSyntheticAsset 関数を使用して、それぞれ合成資産を鋳造および償還します。

  2. 、、totalSyntheticSupplyおよび collateral Remix IDE インターフェイスで変更syntheticBalanceを確認します。

コントラクトの動作の観察

コントラクトに関与し、状態変数と全体的なコントラクト状態がインタラクションによってどのように進化するかを観察します。 この実践的な経験は、合成資産の概念と操作を固めます。

本質的な機能で契約を充実させるにつれて、現実的な合成資産契約に少しずつ近づいています。 次のレッスンでは、このコントラクトをテストして、さまざまなシナリオで意図したとおりに動作することを確認します。 合成資産の実践的な理解は、進歩するにつれて深まり続けています。 次回のレッスンでは、より実践的な学習にご期待ください。

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コントラクトを拡張します。 これらの操作は、実際のシナリオで合成資産が機能するために重要です。 これらの機能がどのように実装されているかを理解するために、コードを詳しく見ていきましょう。

契約の延長

硬度
これらの状態変数をコントラクトに追加します
mapping(address => uint256) public syntheticBalance;
uint256 public totalSyntheticSupply;

上記のスニペットでは、次のようになります。

  • syntheticBalance は、各アドレスの合成資産の残高を追跡するマッピングです。
  • totalSyntheticSupply は、流通している合成資産の総供給量を追跡する変数です。
硬度
mintSyntheticAsset 関数を更新する
function mintSyntheticAsset(uint256 _amount) 公開 {
    require(collateral >= _amount, "Insufficient collateral");
    syntheticBalance[msg.sender] += _amount;
    totalSyntheticSupply += _amount;
    collateral -= _amount;
}

関数内では mintSyntheticAsset 、次のようになります。

  • ステートメントは require 、要求された量の合成資産を鋳造するのに十分な担保があるかどうかを確認します。
  • 呼び出し元 ()msg.sender の は syntheticBalance で増加_amountします。
  • また、 totalSyntheticSupply は によって _amount増加します。
  • 新しく鋳造された合成資産を裏付けるために使用されるため、減少しcollateral_amountます。
硬度
redeemSyntheticAsset 関数を更新する
function 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 します。

完全なコード

タイプスクリプト
SPDX-ライセンス識別子: MIT
プラグマの堅実さ^0.8.0;

コントラクト SyntheticAsset {
    uint256 public underlyingAssetPrice;
    uint256 公開担保
    公共の所有者に宛てます。
    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;
    }

関数 getSyntheticAssetPrice() public view returns (uint256) {
        return underlyingAssetPrice;
    }

function mintSyntheticAsset(uint256 _amount) 公開 {
        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 テストネットにコントラクトをデプロイするには、Goerli ETH (GoerliETH) が必要です。 実際の価値はありませんが、テストネットでガス料金を支払うために不可欠です。

  1. Metamask: MetamaskがGoerliテストネットワークに切り替わっていることを確認します。

  2. Goerli蛇口にアクセスして、GoerliETHをリクエストします。Goerliテストネットのイーサリアムアドレスを貼り付けるだけで、すぐにテストETHを受け取ることができます。

Goerli テストネット展開のための Remix の構成

  1. [Remix] Deploy & Run Transactions で、タブに移動します。

  2. Environmentオプションとして、 を選択しますInjected Provider。このオプションにより、RemixはMetamaskが現在設定されているネットワーク(Goerli Testnet)に接続できます。

  3. ドロップダウンでContract契約OracleIntegratedContractが選択されていることを確認します。

  4. Accountドロップダウンには、Goerli Testnet Ethereumアドレスが表示されます。

拡張コントラクトのコンパイルと展開

更新された機能を配置したので、レッスン 3 の手順に従ってコントラクトをコンパイルしてデプロイします。

拡張契約との対話

延長契約が展開されている場合:

  1. 異なる金額の呼び出し mintSyntheticAssetredeemSyntheticAsset 関数を使用して、それぞれ合成資産を鋳造および償還します。

  2. 、、totalSyntheticSupplyおよび collateral Remix IDE インターフェイスで変更syntheticBalanceを確認します。

コントラクトの動作の観察

コントラクトに関与し、状態変数と全体的なコントラクト状態がインタラクションによってどのように進化するかを観察します。 この実践的な経験は、合成資産の概念と操作を固めます。

本質的な機能で契約を充実させるにつれて、現実的な合成資産契約に少しずつ近づいています。 次のレッスンでは、このコントラクトをテストして、さまざまなシナリオで意図したとおりに動作することを確認します。 合成資産の実践的な理解は、進歩するにつれて深まり続けています。 次回のレッスンでは、より実践的な学習にご期待ください。

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.