Tengo la siguiente estructura dentro de mi archivo vyper:
races: public({
start: timestamp,
end: timestamp,
racersBetHash: bytes32[address],
racersBetAmount: wei_value[address]
}[int128])
Entonces llamo a esta función:
@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
Dentro de mi prueba de trufa, puedo probar la exactitud del registro, por lo que estoy seguro de que la estructura está definida correctamente, pero si trato de leer el valor de la estructura para los dos campos de mapeo, la llamada vuelve a cero. valor.
No tengo problemas para leer start
yend
const currentHashBet = await instance.races__racersBetHash.call(0, '0xf17f52151ebef6c7334fad080c5704d77216b732');
actualHashBet:0x0000000000000000000000000000000000000000000000000000000000000000
Tiene algunas opciones, la primera es escribir su propia función que devuelva una estructura correctamente.
En Solidity esto podría verse como
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);
}
}
Creo que su problema es que no está agregando el índice del elemento de mapeo. Consulte el captador de variables public-struct-array .
Avíseme si tiene alguna pregunta, también es posible que haya invertido el orden del índice y la dirección.
const currentHashBet = espera instancia.carreras__racersBetHash.call( '0xf17f52151ebef6c7334fad080c5704d77216b732',0);
Si no recuerdo mal, 0x000 es el valor nulo para las direcciones, no existe.
"inputs": [ { "type": "int128", "name": "arg0" }, { "type": "address", "name": "arg1" } ],
como puede leer, la primera entrada es el índice y la segunda es la dirección. No entiendo la utilidad de este captador si tengo que escribir uno personalizado.
gran flota