Ich habe die folgende Struktur in meiner Vyper-Datei:
races: public({
start: timestamp,
end: timestamp,
racersBetHash: bytes32[address],
racersBetAmount: wei_value[address]
}[int128])
Dann rufe ich diese Funktion auf:
@public
@payable
def registerRacerBet(_tokenHash: bytes32, _raceID: int128) -> bool:
self.races[_raceID].racersBetAmount[msg.sender] = msg.value
self.races[_raceID].racersBetHash[msg.sender] = _tokenHash
log.NewUserBet(_raceID, msg.sender,
self.races[_raceID].racersBetHash[msg.sender],
self.races[_raceID].racersBetAmount[msg.sender])
return True
In meinem Trüffeltest kann ich die Korrektheit des Protokolls testen, daher bin ich mir sicher, dass die Struktur richtig definiert ist, aber wenn ich versuche, den Wert der Struktur für die beiden Zuordnungsfelder zu lesen, wird der Aufruf auf Null zurückgesetzt Wert.
Ich habe keine Probleme zu lesen start
undend
const currentHashBet = await instance.races__racersBetHash.call(0, '0xf17f52151ebef6c7334fad080c5704d77216b732');
aktuelleHashBet:0x0000000000000000000000000000000000000000000000000000000000000000
Sie haben einige Möglichkeiten, die erste besteht darin, Ihre eigene Funktion zu schreiben, die eine Struktur korrekt zurückgibt.
In Solidity könnte das so aussehen
pragma solidity ^0.4.13;
contract Project
{
struct Person {
address addr;
uint funds;
}
Person[] people;
function getPeople(uint[] indexes)
public
returns (address[], uint[])
{
address[] memory addrs = new address[](indexes.length);
uint[] memory funds = new uint[](indexes.length);
for (uint i = 0; i < indexes.length; i++) {
Person storage person = people[indexes[i]];
addrs[i] = person.addr;
funds[i] = person.funds;
}
return (addrs, funds);
}
}
Ich denke, Ihr Problem ist, dass Sie den Index des Zuordnungselements nicht hinzufügen. Siehe public-struct-array-Variablen-Getter .
Lassen Sie mich wissen, wenn Sie Fragen haben. Möglicherweise haben Sie auch die Reihenfolge von Index und Adresse umgekehrt.
const currentHashBet = warte auf instance.races__racersBetHash.call( '0xf17f52151ebef6c7334fad080c5704d77216b732',0);
Wenn ich mich richtig erinnere, ist 0x000 der Nullwert für Adressen, existiert nicht.
"inputs": [ { "type": "int128", "name": "arg0" }, { "type": "address", "name": "arg1" } ],
da Sie lesen können, dass die erste Eingabe der Index und die zweite die Adresse ist. Ich verstehe den Nutzen dieses Getters nicht, wenn ich einen benutzerdefinierten schreiben muss.
GrandFleet