Derzeit verwende ich ether.camp, um einen Vertrag zu erstellen. In diesem Stadium erhält und speichert es einfach einige Werte. Wenn ich jedoch versuche, die Werte in Bytes/Hex zu erhalten, obwohl der Rückgabetyp eine Zeichenfolge ist?
Wie konvertiere ich das im Soliditätsvertrag wieder in String? Ich habe versucht , wie man ein bytes32 in einen String konvertiert, aber kein Glück
ZB das Speichern von "Hello World!" kehrt zurück0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000c48656c6c6f20576f726c64210000000000000000000000000000000000000000
contract HelloWorld {
struct Items {
address id;
string data;
}
mapping(address => Items) items;
function getItem(address key) returns (string) {
return items[key].data;
}
function addItem (address key, string data) returns (bool) {
Items item = items[key];
item.data = data;
}
}
}
Ich kann in der Seitenleiste der Ethercamp-Transaktionen der IDE das "Hello World!" wird als Zeichenfolge gespeichert, aber ich getItem()
kann sie einfach nicht abrufen?
Verwenden Sie web3.js wie contractInstance.getItem.call(key)
.
Oder markieren Sie getItem als Konstante: function getItem(address key) constant returns (string)
und dann können Sie Folgendes verwenden:
contractInstance.getItem(key)
web3.js decodiert die Bytes automatisch für Sie. Verträge haben nur binäre Daten, hex ist eine kompaktere Art, diese Daten anzuzeigen, und deshalb sehen Sie hex. Die binären Daten werden ebenfalls nach einem ABI kodiert , sodass Werte unterschieden werden können, beispielsweise zwischen einer reinen Zahl und einem String.
Im Allgemeinen können Sie auch verwenden:
> web3.toUtf8 ("0x48656c6c6f20576f726c642100000000000000000000000000000000000000") Hallo Welt!
Benutzer1202278
constant
löst es, aber ich weiß, dass Webjs es automatisch für mich decodieren wirdeth
Benutzer1202278
items.count
oderitems.length
im Sinn hatte.Tjaden Hess