Как правильно импортировать SafeMath.sol в контракт

Это была проблема, с которой я имел дело уже некоторое время. Мое временное решение заключалось в том, чтобы создать файл SafeMath.sol в моем каталоге Contracts и напрямую импортировать его оттуда. Однако я искал «более ясное решение» для этого ... Старый способ, казалось, напрямую импортировал его из ссылки GitHub, как видно в некоторых репозиториях и других сообщениях о переполнении стека, таких как такое

Однако правильный способ сделать это, по-видимому, заключается в установке соответствующего пакета oz (@ openzeppelin / contract-ethereum-package) и импортировании файла непосредственно в необходимый контракт, т.е.

import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol";

Однако при использовании VSCode я по-прежнему получаю сообщение об ошибке Источник «@ openzeppelin / contract-ethereum-package / contract / math / SafeMath.sol» не найден: обратный вызов при импорте файла не поддерживается

Тем не менее, как я могу правильно импортировать SafeMath?

РЕДАКТИРОВАТЬ: я использую pragma solidity ^0.6.0;


person Brennan    schedule 06.03.2020    source источник
comment
Я устанавливаю lib @openzeppelin/contracts с помощью npm и импортирую библиотеку в свой контракт import "@openzeppelin/contracts/math/SafeMath.sol";   -  person Van C    schedule 12.03.2020
comment
Реализация в порядке. Я думаю, у вас другая проблема, проверьте, распознаются ли другие node_modules VSCode, и сначала отладьте эту проблему.   -  person abullock    schedule 12.11.2020
comment
В недавнем обновлении Solidity переменные типа Integer больше не могут переполняться. Подробнее о следующем: docs.soliditylang.org/en/ v0.8.3 / 080-break-changes.html   -  person Matias    schedule 07.04.2021


Ответы (3)


Это больше не требуется с Solidity версии 8.

person Brennan    schedule 27.01.2021
comment
можешь уточнить? Я все еще сталкиваюсь с этим. Я даже попытался поместить файл в тот же каталог, но все равно получаю ошибку. В чем истинная причина этого, если кто-нибудь знает? - person travelerr; 31.01.2021

Я просмотрел node_modules пакет @openzeppelin/contracts. Вот текущий правильный путь импорта на момент публикации:

import "@openzeppelin/contracts/utils/math/SafeMath.sol";
person Jeremy Meek    schedule 18.04.2021

Может использоваться следующим образом:

pragma solidity ^0.5.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v2.3.0/contracts/math/SafeMath.sol";

contract contractForSafeMath {
    
    using SafeMath for uint;
    
    uint256 addResult;
    uint256 subResult;
    uint256 mulResult;
    uint256 divResult;
    uint256 modResult;
    
    uint public MAX_VALUE = 2**256 -1;
    //overflow
    uint256 overflowResult;
    
    function getResults(uint256 a, uint256 b) public{
         addResult = SafeMath.add(a,b);
         subResult = SafeMath.sub(a,b);
         mulResult = SafeMath.mul(a,b);
         divResult = SafeMath.div(a,b);
         modResult = SafeMath.mod(a,b);
         overflowResult = SafeMath.add(SafeMath.add ( (a**b), SafeMath.mul (SafeMath.mul (b, a), b)), (b** b));
    }
    
    function addResultVal(uint a, uint b) public view returns(uint256){
        return addResult;
    }
    
     function subResultVal() public view returns(uint256){
        return subResult;
    }
    
     function mulResultVal() public view returns(uint256){
        return mulResult;
    }
    
     function divResultVal() public view returns(uint256){
        return divResult;
    }
    
     function modResultVal() public view returns(uint256){
        return modResult;
    }
    
    function overflowResultVal() public view returns(uint256){
        return overflowResult;
    }
}
person Vinee Shukla    schedule 18.07.2021
comment
Здравствуйте и добро пожаловать в stackoverflow! Вот предложение по улучшению публикации: вы можете добавить идентификатор языка, чтобы выделить код и сделать его более читабельным. - person Anonymouse; 20.07.2021