Проблемы с библиотеками (Remix)

Пробовал библиотеки в первый раз, имел очень плохой опыт с ними. Мне нужна помощь, чтобы заставить мои контракты работать между библиотеками.

Библиотека 1:

pragma solidity ^0.4.0;

library IntExtended{

    function increment(uint _self) returns (uint){
        return _self+1;
}

    function decrement(uint _self) returns(uint){
        return _self-1;
}

    function incrementByValue(uint _self,uint _value) returns (uint){
        return _self + _value;
}

    function decrementByValue(uint _self,uint _value) returns (uint){
        return _self -_value;
}

    }

Файл, который работает с ним, я не знаю, как вы его называете, вторая библиотека?

pragma solidity ^0.4.0;

import "browser/Library.sol";

contract TestLibrary{
    using IntExtended for uint;

    function testIncrement(uint _base) returns (uint){
        return IntExtended.increment(_base);
}

    function testDecrement(uint _base) returns (uint){
        return IntExtended.decrement(_base);
}

    function testIncrementByValue(uint _base,uint _value) returns(uint){
        return _base.incrementByValue(_value);
} 

    function testDecrementByValue(uint _base, uint _value) returns (uint){
        return _base.decrementByValue(_value);
}
}

Библиотека IntExtendedне работает, однако контракт, ссылающийся на IntExtended, работает.

return IntExtended.increment(_base)должно быть return _base.increment(), да? И что вы имеете в виду под последней фразой? Что именно работает, а что нет? (И что конкретно это означает для того, что не работает? Вы получаете ошибку? Неверный результат?)
Изменил его на _base. , нет разницы. При развертывании IntExtended и попытке выполнить это приведет к... транзакции с IntExtended.decrement с ошибкой в ​​ожидании... транзакции с IntExtended.decrementByValue с ошибкой: ошибка VM: возврат. revert Транзакция была возвращена в исходное состояние. Примечание. Конструктор должен быть оплачен, если вы отправляете значение. Отладьте транзакцию, чтобы получить больше информации.
Пожалуйста, обновите свой вопрос с помощью вашего последнего кода. Ваш комментарий, кажется, был искажен, и трудно воспроизвести вашу ошибку без исправленного кода.
О, похоже, вы пытаетесь развернуть библиотеку самостоятельно, а затем вызвать ее? Я не думаю, что это сработает.
Да, извините за это, не могу редактировать комментарии в течение 5 минут. Вы не можете запускать библиотеки? О, хорошо знать.

Ответы (1)

У вас нет определенного uint в вашем хранилище для использования библиотеки, также ваши библиотечные функции могут быть чистыми.

нижеusing IntExtended for uint

добавлять

uint myUint

а затем вы можете вызывать библиотечные функции, например

myUint.increment()

или_base.increment()

Изменить: закрутить это в ремиксе

pragma solidity ^0.4.0;

library IntExtended{

    function increment(uint _self) returns (uint){
        return _self+1;
    }
}


contract TestLibrary{
    using IntExtended for uint;

    function testIncrement(uint _base) returns (uint){
        return _base.increment();
    }
}

0x1 Transaction mined and execution succeed
 decoded input  {
    "uint256 _base": "5"
}
 decoded output     {
    "0": "uint256: 6"
}
ожидание транзакции с IntExtended.decrementByValue ... транзакция с IntExtended.decrementByValue с ошибкой: ошибка VM: возврат. revert Транзакция была возвращена в исходное состояние. Примечание. Конструктор должен быть оплачен, если вы отправляете значение. Отладьте транзакцию, чтобы получить больше информации. {Получил ту же ошибку}
См., например, отредактированный ответ :)