どのようにEthereum、BSCと多角形のブロックチェーン上のUSDバンクを作成するには?



デジタル通貨革命は現在、銀行業界に広がっている.というのは、暗号通貨は人々の借り入れの仕方を再構築し始めるからだ.
分散した金融、またはDefiは、消費者が、銀行サービスと中央銀行の周りに建設された伝統的な金融機関と規制構造から独立して、移動して、交換して、借りて、暗号通貨を貸す代わりの金融生態系について説明します.
本稿では、あなたの国の中央銀行の承認なしであなた自身の銀行を始める方法をあなたに教えます.私は、私の国(ハイチ島)で銀行システムを変える方法によって常に魅了されました、そこで、ほとんどすべての銀行業務は予約されて、人々のグループに集中しました、そして、人口の大部分は銀行口座を持っていなくて、基本的な信用にさえアクセスしません.
始めましょう
Ethereumからerc 20標準を使うつもりです.
ERC 20?
コメントのためのEthereum要請
ERC 20トークンは、ESUTHUM(BSC、多角形、雪崩等)上でスマート契約を作成し発行するための標準ですブロックチェーン.スマート契約は、スマート財産や人々が投資することができますトークン化された資産を作成するために使用することができます.ERCは「Ethereum要求に対するコメント」を表し、2015年にはERC 20規格を実施しました.
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

interface IERC20 {

    function totalSupply() external view returns (uint);

    function balanceOf(address account) external view returns (uint);

    function transfer(address recipient, uint amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint value);

    event Approval(address indexed owner, address indexed spender, uint value);

}
最初のパートコンテンツは、あなたの銀行スマート契約を作成する親関数として必要最小限.
これらの機能を理解する
今私たちのスマート契約をコード化する時です

contract DefiBank {

    // call it DefiBank
    string public name = "DefiBank";

    //Owner of the bank
    address public owner;

    // create 2 state variables
    address public usdc;      // The token you will accept
    address public bankToken; // The token that represents your bank that will be used to pay interest

    // create 1 array to add all your clients
    address[] public stakers;

    // create a 3 maps 
    mapping(address => uint) public stakingBalance; //Clients balance
    mapping(address => bool) public hasStaked; // Find out if this customer has created an account
    mapping(address => bool) public isStaking; // Find out if this customer is using their account

    ......
}
newこれらの変数と相互作用する関数を作成します.
......

    // In constructor pass in the address for USDC token,  set your custom bank token and the owner will be who will deploy the contract
    constructor() public {
        usdc = INPUT-USDC-TOKEN-ADDRESS-RELATE-TO-THE-BLOACKCHAIN;
        bankToken = INPUT-YOUR-TOKEN-ADDRESS-HERE;
        owner = msg.sender;
    }

......
......

    // Change the ownership 
     function changeOwner(address newOwner) public {
    // require the permission of the current owner
        require(owner == msg.sender, “Y”our are not the current owner);
        owner = newOwner;
    }

......
.......

 // allow user to deposit usdc tokens in your contract

    function deposit(uint _amount) public {

        // Transfer usdc tokens to contract
        IERC20(usdc).transferFrom(msg.sender, address(this), _amount);

        // Update the account balance in map
        stakingBalance[msg.sender] = stakingBalance[msg.sender] + _amount;

        // Add user to stakers array if they haven't staked already
        if(!hasStaked[msg.sender]) {
            stakers.push(msg.sender);
        }

        // Update staking status to track
        isStaking[msg.sender] = true;
        hasStaked[msg.sender] = true;
    }

......
......

    // allow user to withdraw total balance and withdraw USDC from the contract

     function withdrawTokens() public {

        // get the users staking balance in usdc
        uint balance = stakingBalance[msg.sender];

        // require the amount staked needs to be greater then 0
        require(balance > 0, "staking balance can not be 0");

        // transfer usdc tokens out of this contract to the msg.sender (client)
        IERC20(usdc).transfer(msg.sender, balance);

        // reset staking balance map to 0
        stakingBalance[msg.sender] = 0;

        // update the staking status
        isStaking[msg.sender] = false;

} 

......
......

    // Send bank tokens as a reward for staking. You can change the way you need to give interest if you want

    function sendInterestToken() public {
    // require the permission of the current owner
        require(owner == msg.sender, "Your are not the current owner");

        for (uint i=0; i<stakers.length; i++) {
            address recipient = stakers[i];
            uint balance = stakingBalance[recipient];

    // if there is a balance transfer the same amount of bank tokens to the account that is staking as interest

            if(balance >0 ) {
                IERC20(bankToken).transfer(recipient, balance);

            }

        }

    }
......


}
それはあなたの国の銀行システムを破壊するために必要なすべてです.
スマート契約を展開する前に、銀行トークンを作成するのを忘れないでください.
おかげで、この最小限のスマート契約はあなたの多くを助ける願っています.
完全なコード:https://ethereum.org/en/developers/tutorials/understand-the-erc-20-token-smart-contract/