J'essaie d'exécuter un contrat intelligent sur une blockchain privée et mon contrat intelligent fonctionne sur l'IDE Remix et la même chose fonctionne sur ma chaîne privée à l'exception d'une fonction [dataOwnedBy()] qui est censée retourner un tableau de bytes32 mais qui retourne toutes les valeurs zéro dans la console geth. J'ai compilé et déployé mon smart contract en utilisant truffle.
La fonction qui ne fonctionne pas est la suivante : (avec l'extrait de déclaration de données et d'autres prototypes de fonction)
struct data{
bytes32 data_id;
address bidder;
uint bid;
}
mapping(bytes32=>data) bidInfo;
mapping(address=>data[]) dataOwned; //data owned by each address
address[] dataOwners; //list of address who own data
function Bid(bytes32 data_id) public payable { ... }
function closeBid(bytes32 data_id) public { ... }
function whoOwns(bytes32 _data_id) constant public returns (address){ ... }
function dataOwnedBy(address _addr) constant public returns (bytes32[10]){
uint length = dataOwned[_addr].length;
bytes32[10] memory _idArray;
for (uint i=0;i<length;i++){
_idArray[i] = (dataOwned[_addr][i].data_id);
}
return _idArray;
}
Après avoir clôturé l'enchère, lorsque j'interroge la fonction ci-dessus avec l'adresse du gagnant, elle renvoie un tableau de 10 valeurs bytes32, toutes égales à zéro, alors qu'elle devrait renvoyer les data_ids appartenant à l'adresse !
Version Information from console
> web3.version.api
"0.20.1"
truffle(development)> version
Truffle v3.4.11 (core: 3.4.11)
Solidity v0.4.15 (solc-js)
Voici la sortie de la console :
playbid.whoOwns("data_id1")
"0x7d8eb703bd863313325b784ac35017614484f2e7"
playbid.dataOwnedBy("0x7d8eb703bd863313325b784ac35017614484f2e7")
["0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000"]
Au lieu de cela, la première valeur du tableau doit être l'hexagone de "data_id1".
Je ne sais pas ce qui ne va pas ici, mais cela fonctionne parfaitement sur Remix IDE. Merci d'avance !