首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uint256输入在RemixIDE中

uint256输入在RemixIDE中
EN

Stack Overflow用户
提问于 2022-02-25 16:46:22
回答 1查看 482关注 0票数 0

我正在努力学习开发我的第一个智能合同,以便在aave上使用闪存贷款。关于事务输入的金额,我有一个问题。

我有一个函数,要求我需要的令牌数量,类型是uint256。当我键入10,我只收到0.0000000000000001的闪存贷款。为什么?也许这是个愚蠢的问题,但我不明白是怎么回事。

代码语言:javascript
复制
// SPDX-License-Identifier: agpl-3.0
pragma solidity 0.6.12;

import { FlashLoanReceiverBase } from "./FlashLoanReceiverBase.sol";
import { ILendingPool, ILendingPoolAddressesProvider, IERC20 } from "./Interfaces.sol";
import { SafeMath } from "./Libraries.sol";
import "./Ownable.sol";

/*
* A contract that executes the following logic in a single atomic transaction:
*
*
*/
contract BatchFlashDemo is FlashLoanReceiverBase, Ownable {
    
    ILendingPoolAddressesProvider provider;
    using SafeMath for uint256;
    uint256 flashDaiAmt0;
    address lendingPoolAddr;
    
    // mumbai reserve asset addresses
    address mumbaiDai = 0x001B3B4d0F3714Ca98ba10F6042DaEbF0B1B7b6F;

    
    // intantiate lending pool addresses provider and get lending pool address
    constructor(ILendingPoolAddressesProvider _addressProvider) FlashLoanReceiverBase(_addressProvider) public {
        provider = _addressProvider;
        lendingPoolAddr = provider.getLendingPool();
    }

    /**
        This function is called after your contract has received the flash loaned amount
     */
    function executeOperation(
        address[] calldata assets,
        uint256[] calldata amounts,
        uint256[] calldata premiums,
        address initiator,
        bytes calldata params
    )
        external
        override
        returns (bool)
    {
        
        /*
        *
        *
        */

        // Approve the LendingPool contract allowance to *pull* the owed amount
        // i.e. AAVE V2's way of repaying the flash loan
        for (uint i = 0; i < assets.length; i++) {
            uint amountOwing = amounts[i].add(premiums[i]);
            IERC20(assets[i]).approve(address(_lendingPool), amountOwing);
        }

        return true;
    }

    
    
    /*
    * This function is manually called to commence the flash loans sequence
    */
    function executeFlashLoans(uint256 _flashDaiAmt0) public onlyOwner {
        address receiverAddress = address(this);

        // the various assets to be flashed
        address[] memory assets = new address[](1);
        assets[0] = mumbaiDai; 

        
        // the amount to be flashed for each asset
        uint256[] memory amounts = new uint256[](1);
        amounts[0] = _flashDaiAmt0;

        flashDaiAmt0 = _flashDaiAmt0;

        // 0 = no debt, 1 = stable, 2 = variable
        uint256[] memory modes = new uint256[](1);
        modes[0] = 0;

        address onBehalfOf = address(this);
        bytes memory params = "";
        uint16 referralCode = 0;

        _lendingPool.flashLoan(
            receiverAddress,
            assets,
            amounts,
            modes,
            onBehalfOf,
            params,
            referralCode
        );
    }
    
        
    /*
    * Rugpull all ERC20 tokens from the contract
    */
    function rugPull() public payable onlyOwner {
        
        // withdraw all ETH
        msg.sender.call{ value: address(this).balance }("");
        
        // withdraw all x ERC20 tokens
        IERC20(mumbaiDai).transfer(msg.sender, IERC20(mumbaiDai).balanceOf(address(this)));
    }
    
}

我正在部署将这个地址作为参数:0x178113104fEcbcD7fF8669a0150721e231F0FD4B,它是从这里获取的合同:https://docs.aave.com/developers/v/2.0/deployed-contracts/matic-polygon-market

当我尝试要求1000多个令牌时,我会得到错误。希望这有助于繁殖。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-25 19:45:18

EVM不支持十进制数。因此,一种常见的方法是在契约中声明许多小数,然后将它们包含在存储的值中。

当合同使用2个小数时,1的值被存储为100。

Aave协议适用于ERC20令牌,其中标准定义了一个名为decimals()的函数,以返回许多十进制位。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71269061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档