Probleme mit Bibliotheken (Remix)

Habe Bibliotheken zum ersten Mal ausprobiert, wirklich schlechte Erfahrungen damit gemacht. Ich brauche etwas Hilfe, um meine Verträge zwischen Bibliotheken zum Laufen zu bringen.

Bibliothek 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;
}

    }

Datei, die damit funktioniert, ich weiß nicht, wie Sie es nennen, zweite Bibliothek?

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);
}
}

Die Bibliothek IntExtendedfunktioniert nicht, aber der Vertrag, der auf IntExtended verweist, funktioniert.

return IntExtended.increment(_base)sollte sein return _base.increment(), oder? Und was meinst du mit deinem letzten Satz? Was genau funktioniert und was nicht? (Und für das Zeug, das nicht funktioniert, was genau bedeutet das? Erhalten Sie eine Fehlermeldung? Ein falsches Ergebnis?)
Geändert in _base. , kein Unterschied. Bei der Bereitstellung von IntExtended und dem Versuch, es auszuführen, würde dies dazu führen, dass ... transact to IntExtended.decrement errored pending ... transact to IntExtended.decrementByValue errored: VM error: revert. revert Die Transaktion wurde in den Ausgangszustand zurückgesetzt. Hinweis: Der Konstruktor sollte zahlbar sein, wenn Sie einen Wert senden. Debuggen Sie die Transaktion, um weitere Informationen zu erhalten.
Bitte aktualisieren Sie Ihre Frage mit Ihrem neuesten Code. Ihr Kommentar scheint entstellt worden zu sein, und es ist schwierig, Ihren Fehler ohne den korrigierten Code zu reproduzieren.
Oh, es sieht so aus, als ob Sie versuchen, die Bibliothek selbst bereitzustellen und sie dann aufzurufen? Ich glaube nicht, dass das funktionieren wird.
Ja, tut mir leid, ich kann Kommentare 5 Minuten lang nicht bearbeiten. Sie können keine Bibliotheken ausführen? Ach gut zu wissen.

Antworten (1)

Sie haben in Ihrem Speicher kein Uint definiert, um die Bibliothek zu verwenden, auch Ihre Bibliotheksfunktionen können rein sein.

unterusing IntExtended for uint

hinzufügen

uint myUint

und dann können Sie die Bibliotheksfunktionen wie aufrufen

myUint.increment()

oder_base.increment()

Edit: Im Remix hochgeladen

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"
}
transact to IntExtended.decrementByValue ausstehend ... transact to IntExtended.decrementByValue errored: VM error: revert. revert Die Transaktion wurde in den Ausgangszustand zurückgesetzt. Hinweis: Der Konstruktor sollte zahlbar sein, wenn Sie einen Wert senden. Debuggen Sie die Transaktion, um weitere Informationen zu erhalten. {Denselben Fehler erhalten}
Siehe bearbeitete Antwort zum Beispiel :)