Nachfolgend der Vertrag:
uint32 firstTimeUserPoints=10;
struct struUser{
string orginalName;
string originalKshoplink;
string orginalDocumentConvention;
bool validated;
uint32 Points;
uint32 totalPoints;
}
struct struUserTotalPoints{
string orginalName;
uint32 totalPoints;
}
mapping(string=>struUser)MappingToken;
mapping(bytes32=>struUser)SampleMappingToken;
struUser[] struUsers;
struUserTotalPoints[] struArrayUserTotalPoints;
string[] docConventionMappers;
string[] orginalName;
//TO INSERT A RECORD WITH SOME DATA
function AddUser(string name,string link,string docConvention) public
{
var user=MappingToken[docConvention];
var existingTotalPoints=userTotalPoints(name);
user.orginalName=name;
user.originalKshoplink=link;
user.validated=false;
user.Points=firstTimeUserPoints;
user.totalPoints=existingTotalPoints+firstTimeUserPoints;
updateUserTotalPoints(name,user.totalPoints);
user.orginalDocumentConvention=docConvention;
docConventionMappers.push(docConvention);
struUsers.push(struUser({orginalName:name,originalKshoplink:link,
validated:user.validated,Points:user.Points,totalPoints:user.totalPoints,
orginalDocumentConvention:docConvention}));
}
//IS THE BELOW FUNCTION FINE?, THIS IS ONE OF THE PLACE I BELIEVE IT IS GETTING MESSED.
//FOR FETCHING TOTAL POINTS OF A USER
function userTotalPoints(string name) public returns(uint32){
bool isUserTotalPointsCalculated=false;
for(uint j=0;j<struArrayUserTotalPoints.length;j++){
if(keccak256(struArrayUserTotalPoints[j].orginalName)==keccak256(name)){
isUserTotalPointsCalculated=true;
return struArrayUserTotalPoints[j].totalPoints;
}
}
if(!isUserTotalPointsCalculated){
struArrayUserTotalPoints.push(struUserTotalPoints({orginalName:name,totalPoints:firstTimeUserPoints}));
return 0;
}
}
//WHEN I CALL THE BELOW METHOD IT IS RUNNING FINE IN REMIX BUT NOT WHEN I USED WITH TRUFFLE - IN TRUFFLE THE STRING IS RETURNED AS " " AND THE TOTAL POINTS
function viewuser(string docConvention)public returns(string,uint32,uint32)
{
return (MappingToken[docConvention].orginalName,MappingToken[docConvention].Points,
userTotalPoints(MappingToken[docConvention].orginalName));
}
function updateUserTotalPoints(string name,uint32 totalPoints) public{
for(uint j=0;j<struArrayUserTotalPoints.length;j++){
if(keccak256(struArrayUserTotalPoints[j].orginalName)==keccak256(name)){
struArrayUserTotalPoints[j].totalPoints=totalPoints;
}
}
}
Ich habe es mit verschiedenen Eingängen versucht und es funktioniert gut.
<input id="txtViewUser" type="text" placeholder="Enter name of document convention" />
<button id="btnViewUser" onclick="App.viewUser()">View User</button>
viewUser:function () {
var docConvention=document.getElementById("txtViewUser");
sampleinstance.deployed().then(function (instance) {
return instance.viewuser.call(docConvention).then(function (v) {
console.log(v);
$("#tdEmailName").text(v[0].toString());
$("#tdPoints").text(v[1].toNumber());
$("#tdTotalPoints").text(v[2].toNumber());
})
})
},
the 0 array will return the name of the user
Ich habe fünfmal verschiedene Benutzer eingefügt, also gibt es 50, wo ich versucht habe, Benutzer für eine Person anzuzeigen.
Bitte helfen Sie mir bei der Analyse, wo ich falsch liege.
Vivek.
Es sieht so aus, als ob es wie erwartet funktioniert, aber Sie haben das BigNumber-Format nicht verstanden. Dies wird für Sie von Remix dekodiert.
BigNumber ist eine Möglichkeit, eine Zahl darzustellen, die signifikantere Ziffern hat, als JS verarbeiten kann (uint256).
Versuchen Sie, Ihre Funktionsantworten in ein lesbares Format zu konvertieren.
console.log(response.toString(10));
Wenn das die richtige Antwort ist, sollten Sie sich die in Web3 enthaltene BigNumber-Bibliothek durchlesen.
Ich hoffe es hilft.
Benutzer2865883
Rob Hitchens
v.toString(10);
Benutzer2865883