去中心化大小公排雙軌互助dapp系統開發智慧合約定製詳情

nice1022發表於2023-03-09

transfer轉帳函式,系統開發I34-案例I633-演示53I9,一個比較重要的功能,呼叫者可以將自己的餘額轉給其它帳戶。


_transfer為private的具體實現函式。主要是作了一些必要的檢查,然後從發起帳戶扣減餘額,再將餘額加到接收帳戶。最後傳送了一個轉帳事件,方便開發者監聽轉帳功能。這裡的_beforeTokenTransfer和_afterTokenTransfer並沒有實現具體功能,開發中可根據實現需要做一些功能實現。

allowance、approve主要是實現授權其它帳戶可以使用自己的餘額,並設定使用上限。相關的授權者儲存在_allowances變數中。


    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {

        address owner = msg.sender;

        _approve(owner, spender, _allowances[owner][spender] + addedValue);

        return true;

    }

 

    function decreaseAllowance(address spender, uint256 substractedValue) public virtual returns (bool) {

        address owner = msg.sender;

        uint256 currentAllowance = _allowances[owner][spender];

        require(currentAllowance >= substractedValue, "ERC20: decreased allowance below zero");

        unchecked {

            _approve(owner, spender, currentAllowance - substractedValue);

        }

        return true;

    }

increaseAllowance、decreaseAllowance兩個函式是對approve函式功能的加強,對授權額度進行增減,這兩個函式關不是ERC20協議中的內容。只是作者在參考原始碼時覺得有用,就加入了這兩個函式。

ransferFrom,_spendAllowance是在授權額度下,進行轉帳的功能實現。


transferFrom函式的from引數是授權帳戶,to是餘額接受帳戶,amount是轉帳餘額,該函式的功能是將from帳戶的餘額轉移amount個資料至to使用者帳戶中,呼叫者必須是from帳戶透過_approve對其進行過授權,並且還有剩餘的授權額度。該函式與transfer的區別是,transfer只能轉移出呼叫者自己的帳戶餘額。


_spendAllowance是在進行授權轉帳時首先扣減授權額度,保證被授權都在授權額度範圍內使用轉帳功能。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011332/viewspace-2938942/,如需轉載,請註明出處,否則將追究法律責任。

相關文章