Si id
(Ej: 1) el campo en la estructura no es único y se asignan diferentes nombres con el mismo id=1
. ¿Todos los nombres asignados id=1
se pueden obtener de blockchain?
pragma solidity ^0.4.4;
contract Register{
struct Details{
bytes id;
string name;
}
mapping (bytes => Details) DetailsTable;
function saveBondToBC(bytes id,string name)
payable returns(bool success){
DetailsTable[id].id = id;
DetailsTable[id].name = name;
return true;
}
function getAllNames(bytes id) return (string){
DetailsTable[id].name; //Return latest 'name' written
}
son únicos (o una relación de muchos a uno en la jerga de las bases de datos relacionales). Por ejemplo, si el ID 123 está asignado al nombre Vitalik. ¡Id 123 solo puede conducir a Vitalik y ningún otro valor! Sin embargo, otros id (por ejemplo, 947) también pueden apuntar a Vitalik (relación de muchos a uno).
Si actualiza el mapeo 123 => Vitalik
a 123 => Gavin
, por ejemplo, entonces, obviamente, el id 123 apuntará solo a Gavin y Gavin.
No estoy seguro de si es obvio o no, pero en aras de la claridad, en esas líneas
DetailsTable[id].id = id;
DetailsTable[id].name = name;
no actualiza su mapeo en absoluto, sino solo los campos en su estructura. Además, si sus ID son dos valores diferentes, encontraría mejores nombres. Si su identificación en la estructura es la misma que la identificación para el mapeo, no tiene sentido almacenar la identificación en la estructura nuevamente (esto crea redundancia y solo agregará una sobrecarga para mantener los dos valores sincronizados).
tampoco puede recorrer el mapeo ni saber qué identificaciones se han inicializado (todas las asignaciones son válidas) si no realiza un seguimiento de sus identificaciones (ya sea en su contrato inteligente o fuera de la cadena de bloques en una base de datos)
En su contrato inteligente, podría crear una matriz para eso
bytes[] allMyUniqueIds;
luego, recorrerlo allMyUniqueIds
te devolverá toda tu Details
estructura
Gracias, este funcionó para mí :)
struct IdStruct{
bytes12[] structArray;
}
mapping(string => IdStruct) idStructs;
function appendNames(string id, bytes12 name) payable returns (bool success){
idStructs[id].structArray.push(name);
}
function getName(string id) returns(bytes12[]){
return idStructs[id].structArray;
}
angelmaria
salanfe