国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái)

這篇具有很好參考價(jià)值的文章主要介紹了基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

內(nèi)容簡(jiǎn)介

使用 solidity 實(shí)現(xiàn)的基于 ERC20 代幣協(xié)議的借貸款去中心化應(yīng)用平臺(tái)(極簡(jiǎn)版)。實(shí)現(xiàn)存款、取款、貸款、還款以及利息計(jì)算的功能。

設(shè)計(jì)邏輯

  • 平臺(tái)提供ERC20協(xié)議代幣的相關(guān)存取和利息計(jì)算工作。部署智能合約時(shí)初始化貸款和存款的年利率、代幣實(shí)現(xiàn)地址。
  • 用戶可以將手中的代幣存入平臺(tái),等到一定的期限再次拿出獲得本金加利息。也可以向平臺(tái)申請(qǐng)代幣,在一定的期限之后自主還款即可。

ERC20TokenLoanPlatform 合約

事件

合約包含4個(gè)事件,包括 Deposit 存款、Withdrawal 取款、CreateLoan 貸款、PayLoan 還款。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

import "erc-token-standard/ERC/IERC20.sol"; 

// 基于ERC20代幣協(xié)議的借貸款平臺(tái) 
contract ERC20TokenLoanPlatform {
    event Deposit(address depositor, uint amount ,uint DepositTime); 
    event Withdrawal(address payee, uint amount, uint WithdrawalTime); 
    event CreateLoan(address loanAddress, uint amount, uint interest, uint CreateLoanTime); 
    event PayLoan(address loanAddress, uint amount, bool total, uint PayLoanTime); 

結(jié)構(gòu)體

合約包含2個(gè)結(jié)構(gòu)體, 包括 Client 客戶信息、Loan 貸款信息。

	// 客戶信息 
	struct Client {
	    uint amount;
	    uint depositTime; 
	    uint withdrawalTime;
	}
	
	// 貸款信息
	struct Loan {
	    address loanAddress; 
	    uint amount;
	    uint interest; 
	}

狀態(tài)變量

本合約使用了6個(gè)狀態(tài)變量,其中有 clients 客戶信息映射、loans 貸款信息映射、annualInterestRate 貸款年利率、annualDepositRate 存款年利率、tokenAddress 代幣實(shí)現(xiàn)地址、erc20Token 代幣對(duì)象。

	mapping(address => Client) private clients; 
    mapping (uint => Loan) private loans;
    uint public annualInterestRate;        // 貸款年利率,如5%
    uint public annualDepositRate;         // 存款年利率,如2%
    address public tokenAddress;           // ERC20代幣地址 
    IERC20 erc20Token; 

函數(shù)

本合約包含了8個(gè)基本函數(shù),其中包括構(gòu)造函數(shù)、deposit 存款、withdrawal 取款、createLoan 貸款、payLoan 還款、loanInquiry 待還款查詢、depositInquiry 賬戶余額查詢、balanceInquiry 客戶信息查詢 。

	// 構(gòu)造函數(shù)
    constructor(address _tokenAddress, uint _initLoanInterest, uint _initDepositInterest) {
        tokenAddress = _tokenAddress;           // 初始化代幣地址 
        erc20Token = IERC20(tokenAddress);      // 聲明IERC20接口合約變量
        annualInterestRate = _initLoanInterest; 
        annualDepositRate = _initDepositInterest;   
    }

    // 存款 
    function deposit(uint _amount) public {
        require(_amount > 0, "Amount is less than or equal to 0.");      // 存款代幣數(shù)不能為0     
        require(erc20Token.balanceOf(msg.sender) >= _amount, "Number of tokens is insufficient.");            // 檢查持有代幣數(shù)是否大于等于存款代幣數(shù)
        require(erc20Token.allowances(msg.sender, address(this)) >= _amount, "Not enough approvals.");        // 檢查是否有足夠的授權(quán) 

        erc20Token.transferFrom(msg.sender, address(this), _amount);             
        clients[msg.sender].amount += _amount;                      // 增加存款
        if (clients[msg.sender].depositTime == 0){
            clients[msg.sender].depositTime = block.timestamp;      // 當(dāng)前的存款時(shí)間 
        }
        
        emit Deposit(msg.sender,_amount ,block.timestamp); 
    }

    // 取款 
    function withdrawal(uint _amount) public {
        require(_amount > 0, "Amount is less than or equal to 0.");               // 取款代幣數(shù)不能為0  
        uint timestamp = block.timestamp;   
        depositInquiry();                 // 計(jì)算本金 + 利息2% 
        require(clients[msg.sender].amount >= _amount, "Insufficient balance.");         // 檢查存款代幣數(shù)是否大于等于取款代幣數(shù) 
        require(erc20Token.balanceOf(address(this)) >= _amount, "Platform bankruptcy."); // 檢查平臺(tái)的代幣數(shù)是否滿足取款 
         
        erc20Token.transfer(msg.sender, _amount);            
        clients[msg.sender].amount -= _amount; 
        clients[msg.sender].withdrawalTime = timestamp; 

        emit Withdrawal(msg.sender, _amount, timestamp);
    }

    // 貸款
    function createLoan(uint _amount) public returns (uint){
        require(_amount > 0, "Amount is less than or equal to 0.");            // 貸款不能小于0        
        require(erc20Token.balanceOf(address(this))*10/100 >= _amount, "Exceeding the platform loan limit.");        // 超過平臺(tái)總存款的10%
        require(erc20Token.balanceOf(msg.sender) + clients[msg.sender].amount >= _amount*20/100, "Invalid loan.");   // 賬戶資產(chǎn)數(shù)需有貸款的20%

        erc20Token.transfer(msg.sender, _amount); 
        uint timestamp = block.timestamp;           // 以當(dāng)前塊的時(shí)間戳為貸款id值 
        uint interest = _amount * annualInterestRate / 100;     // 計(jì)算利率 
        
        loans[timestamp].loanAddress = msg.sender; 
        loans[timestamp].amount = _amount; 
        loans[timestamp].interest = interest;     // 計(jì)算利率 

        emit CreateLoan(msg.sender, _amount, interest, timestamp);

        return timestamp; 
    }

    // 還款
    function payLoan(uint _amount, uint _loanId) public {
        require(_amount > 0, "Amount is less than or equal to 0.");        // 還款需大于0
        require(erc20Token.balanceOf(msg.sender) >= _amount, "Number of tokens is insufficient.");            // 檢查持有代幣數(shù)是否大于等于存款代幣數(shù)
        require(erc20Token.allowances(msg.sender, address(this)) >= _amount, "Not enough approvals.");        // 檢查是否有足夠的授權(quán) 

        uint total = loanInquiry(_loanId);        // 計(jì)算代還款 
        bool fullPayment = false; 

        // 還一部分或一次性還 
        if (total <= _amount) {     
            erc20Token.transferFrom(msg.sender, address(this), total);       // 一次性還完
            delete loans[_loanId];                                           // 刪除貸款記錄  
            fullPayment = true; 
        } else {    
            erc20Token.transferFrom(msg.sender, address(this), _amount);        // 還了一部分 _amount 
            loans[_loanId].amount -= _amount;                                   // 重寫貸款記錄 
        }
        
        emit PayLoan(msg.sender, _amount, fullPayment, block.timestamp);
    }

    
    // 待還款查詢
    function loanInquiry(uint _loanId) public returns (uint) {
        require(loans[_loanId].amount != 0, "Invalid loan id.");
        require(loans[_loanId].loanAddress == msg.sender, "Non-personal enquiry.");

        // 計(jì)算需要還款的代幣數(shù): 本金 + 利息
        uint timestamp = block.timestamp; 
        uint diffDays = ( timestamp - _loanId) / 86400;                 // 時(shí)間戳轉(zhuǎn)換為天數(shù) 
        uint total = loans[_loanId].amount + loans[_loanId].interest*diffDays/365;      // 總計(jì)還款數(shù) 
        
        loans[_loanId].amount = total;            //重寫用戶貸款數(shù) 

        return total; 
    }

    // 余額+利息的計(jì)算
    function depositInquiry() public  returns (uint){
        uint principal = clients[msg.sender].amount;    // 本金
        uint diffDays = (block.timestamp - clients[msg.sender].depositTime) / 86400;                 // 時(shí)間戳轉(zhuǎn)換為天數(shù) 
        uint interest = principal * annualDepositRate / 100 * diffDays / 365;
        uint total = principal + interest;
        clients[msg.sender].amount = total;

        return total;
    }

    // 客戶信息查詢 
    function balanceInquiry() public returns (address, uint, uint, uint){
        depositInquiry();                 // 計(jì)算本金 + 利息2% 
        uint balance = clients[msg.sender].amount;
        uint depositTime = clients[msg.sender].depositTime;
        uint withdrawalTime = clients[msg.sender].withdrawalTime;

        return (msg.sender, balance, depositTime, withdrawalTime);
    }
}

Remix 運(yùn)行實(shí)現(xiàn)

部署相關(guān)智能合約

solidity實(shí)現(xiàn)ERC20代幣標(biāo)準(zhǔn)。
先部署 ERC20 代幣合約,初始化代幣合約信息。
基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊
部署 ERC20TokenLoanPlatform 合約,初始化代幣實(shí)現(xiàn)地址、貸款年利率5和存款年利率2。
基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊
首先需要給自己的賬戶鑄造 200 個(gè)代幣用于功能測(cè)試,
基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊
再給 ERC20TokenLoanPlatform 合約地址鑄造一定數(shù)量的代幣和授權(quán)代幣轉(zhuǎn)賬權(quán)限,保證平臺(tái)功能的正常運(yùn)行。
基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊
基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊

存款和取款

調(diào)用 deposit 函數(shù)存款 100 個(gè)代幣,
基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊
balanceInquiry 函數(shù)查看余額變化,這里已經(jīng)顯示自己的余額為剛才存入的100。
基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊
調(diào)用 withdrawal 函數(shù)取出指定數(shù)量的代幣,不能超出自己的余額。平臺(tái)會(huì)自動(dòng)進(jìn)行存款利息計(jì)算。
基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊
balanceInquiry 函數(shù)查看余額變化,這里已經(jīng)顯示自己的余額還剩下50。
基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊

貸款和還款

調(diào)用 createLoan 函數(shù)輸入自己需要貸多少代幣。在這里注意賬戶的資產(chǎn)需要有貸款數(shù)的20%才有資格貸款。成功后拿到此次貸款的id值 1703236890。
基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊
調(diào)用 payLoan 函數(shù)輸入貸款的 id 值進(jìn)行還款,可以先還一部分也可以一次性還完,平臺(tái)會(huì)自動(dòng)進(jìn)行貸款利息計(jì)算。

基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊
調(diào)用 loanInquiry 函數(shù)輸入貸款的 id 值進(jìn)行待還款的查詢。
基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái),區(qū)塊鏈,去中心化,區(qū)塊鏈,solidity,Remix,以太坊

源碼地址

本文只是簡(jiǎn)單介紹,具體實(shí)現(xiàn)看代碼。gitee 開源地址。文章來源地址http://www.zghlxwxcb.cn/news/detail-761776.html


到了這里,關(guān)于基于ERC20代幣協(xié)議實(shí)現(xiàn)的去中心化應(yīng)用平臺(tái)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Web3下的去中心化契約

    Web3下的去中心化契約

    隨著Web3的興起,智能合約成為了這一新興領(lǐng)域中最為重要的概念之一。智能合約是一種在區(qū)塊鏈上執(zhí)行的可編程代碼,其作用類似于傳統(tǒng)世界中的合約,但具有更多的靈活性和安全性。本文將介紹智能合約的基本概念、工作原理以及在Web3下的應(yīng)用場(chǎng)景。 一、智能合約的概念

    2024年02月09日
    瀏覽(20)
  • Solidity中的去中心化金融(DeFi)應(yīng)用開發(fā)

    去中心化金融(Decentralized Finance,DeFi)是基于區(qū)塊鏈技術(shù)的一種新型金融模式,它通過智能合約和去中心化應(yīng)用程序(DApps)實(shí)現(xiàn)了傳統(tǒng)金融中的各種功能,如借貸、交易、存款和投資,而無需依賴傳統(tǒng)金融機(jī)構(gòu)。Solidity是一種專為以太坊平臺(tái)設(shè)計(jì)的智能合約編程語言,它成

    2024年02月09日
    瀏覽(23)
  • 構(gòu)建高可用的去中心化微服務(wù)集群架構(gòu)指南

    構(gòu)建高可用的去中心化微服務(wù)集群架構(gòu)指南

    隨著云計(jì)算、大數(shù)據(jù)和物聯(lián)網(wǎng)的快速發(fā)展,企業(yè)對(duì)于可擴(kuò)展的、高性能的微服務(wù)架構(gòu)的需求也日益增長(zhǎng)。傳統(tǒng)的集中式架構(gòu)已經(jīng)不能滿足這些需求,因此出現(xiàn)了去中心化的微服務(wù)集群架構(gòu)。本文將介紹如何構(gòu)建高可用的去中心化微服務(wù)集群架構(gòu),以滿足企業(yè)的 高性能 和 可擴(kuò)

    2024年02月12日
    瀏覽(24)
  • 區(qū)塊鏈創(chuàng)新:探索 Web3 的去中心化應(yīng)用

    區(qū)塊鏈創(chuàng)新:探索 Web3 的去中心化應(yīng)用

    引言 隨著數(shù)字化時(shí)代的發(fā)展,區(qū)塊鏈技術(shù)作為一種顛覆性的技術(shù)正在改變著我們的社會(huì)和經(jīng)濟(jì)生活。在這個(gè)背景下,Web3的概念應(yīng)運(yùn)而生,它代表了一種去中心化的互聯(lián)網(wǎng)新時(shí)代,為去中心化應(yīng)用(DApps)的發(fā)展提供了堅(jiān)實(shí)的基礎(chǔ)。本文將深入探討Web3的去中心化應(yīng)用,探索其

    2024年04月08日
    瀏覽(24)
  • 以太坊數(shù)字資產(chǎn)的發(fā)行和流通:以太坊上的數(shù)字資產(chǎn)定義、ERC 20代幣合約標(biāo)準(zhǔn)、ERC 20標(biāo)準(zhǔn)接口、ERC 721代幣合約標(biāo)準(zhǔn)、

    以太坊設(shè)計(jì)的目標(biāo)就是讓各種數(shù)字資產(chǎn)能以智能合約的形式運(yùn)行在以太坊虛擬機(jī)上。目前,眾多智能合約中最廣泛應(yīng)用的是代幣合約(Token Contract)。是負(fù)責(zé)管理賬戶以及其擁有的代幣的智能合約,實(shí)質(zhì)可以理解為一張賬戶地址和對(duì)應(yīng)賬戶代幣余額的映射表。 即:代幣可以被

    2023年04月11日
    瀏覽(25)
  • 創(chuàng)建一個(gè)區(qū)塊鏈,是由三個(gè)節(jié)點(diǎn)組成的去中心化網(wǎng)絡(luò)。

    創(chuàng)建一個(gè)區(qū)塊鏈,是由三個(gè)節(jié)點(diǎn)組成的去中心化網(wǎng)絡(luò)。

    目錄 一、準(zhǔn)備工作: 1、創(chuàng)建三個(gè)python文件: 2、創(chuàng)建nodes.json文件 3、transaction.json文件 4、打開三個(gè)控制臺(tái) 二、在三個(gè)節(jié)點(diǎn)上進(jìn)行交互。 二、添加交易發(fā)布請(qǐng)求(a向b發(fā)送10000coin) lancoin_node_5001.py、lancoin_node_5002.py、lancoin_node_5003.py。 它們每個(gè)都將連接到不同的端口,一個(gè)端

    2024年04月29日
    瀏覽(30)
  • TikTok區(qū)塊鏈實(shí)踐:數(shù)字社交媒體的去中心化未來

    TikTok區(qū)塊鏈實(shí)踐:數(shù)字社交媒體的去中心化未來

    隨著區(qū)塊鏈技術(shù)的日漸成熟,數(shù)字社交媒體行業(yè)也在探索如何整合區(qū)塊鏈,以推動(dòng)去中心化發(fā)展。在這一潮流中,TikTok作為全球領(lǐng)先的短視頻平臺(tái),積極實(shí)踐區(qū)塊鏈技術(shù),探索數(shù)字社交媒體的未來。本文將深入探討TikTok的區(qū)塊鏈實(shí)踐,以及這一實(shí)踐對(duì)數(shù)字社交媒體去中心化發(fā)

    2024年02月04日
    瀏覽(16)
  • 代幣合約 ERC20 Token接口

    代幣合約 ERC20 Token接口

    在以太坊上發(fā)布代幣就要遵守以太坊的規(guī)則,那么以太坊有什么規(guī)則呢?以太坊的精髓就是利用代碼規(guī)定如何運(yùn)作,由于在以太坊上發(fā)布智能合約是不能修改和刪除的,所以智能合約一旦發(fā)布,就意味著永久有效,不可篡改。 在以太坊上發(fā)布了這么多與代幣有關(guān)的合約,那么

    2024年02月02日
    瀏覽(20)
  • 什么是 Web 3.0:面向未來的去中心化互聯(lián)網(wǎng)

    什么是 Web 3.0:面向未來的去中心化互聯(lián)網(wǎng)

    Web 3.0 可能是基于公共區(qū)塊鏈的未來互聯(lián)網(wǎng)模式,公共區(qū)塊鏈?zhǔn)且环N用以促進(jìn)加密貨幣交易的記錄保存系統(tǒng)。 Web 3.0 的最重要的地方在于它是去中心化的,這意味著用戶不是通過騰訊、阿里、百度、字節(jié)、谷歌、蘋果等公司提供的服務(wù)訪問互聯(lián)網(wǎng),而是個(gè)人自己擁有和管理互

    2024年01月21日
    瀏覽(22)
  • Polkadot + DeFi | 透明公平、高效交易的去中心化金融未來可期

    Polkadot + DeFi | 透明公平、高效交易的去中心化金融未來可期

    擁有投資理財(cái)意愿的人士,對(duì)金融領(lǐng)域的關(guān)注熱度一直居高不下。從傳統(tǒng)的金融產(chǎn)品,到去中心化金融產(chǎn)品的體驗(yàn)與嘗試,借助區(qū)塊鏈技術(shù)實(shí)現(xiàn)資產(chǎn)存儲(chǔ)、資金交易行為范式的變革。無論是股票、期權(quán),還是其他金融資產(chǎn)形式,DeFi(去中心化金融)不斷實(shí)現(xiàn)對(duì)傳統(tǒng)中心化金融

    2024年01月25日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包