Solidity! Invalid implicit conversion from string memory to bytes memory requested












3















pragma solidity ^0.5

contract ProofOfExistence {

// ... some code here

function proofFor(string memory document) public view returns(bytes32) {
return sha256(document);
}

// ... some more code here
}


Gives following error :




TypeError: Invalid type for argument in function call. Invalid
implicit conversion from string memory to bytes memory requested.




I am unable to understand why this error is coming.



UPDATE :



pragma solidity ^0.5;
// Proof of Existence contract, version 3
contract ProofOfExistence3 {
mapping (bytes32 => bool) private proofs;
// store a proof of existence in the contract state
function storeProof(bytes32 proof) public{
proofs[proof] = true;
}
// calculate and store the proof for a document
function notarize(string memory document) public {
**bytes32 proof = proofFor(document);**
storeProof(proof);
}
// helper function to get a document's sha256
function proofFor(bytes memory document) public pure returns (bytes32) {
return sha256(document);
}
// check if a document has been notarized
function checkDocument(string memory document) view public returns (bool) {
**bytes32 proof = proofFor(document);**
return hasProof(proof);
}
// returns true if proof is stored
function hasProof(bytes32 proof) view public returns(bool) {
return proofs[proof];


UPDATE ERROR After the update as suggested I am getting the same error but on the lines having ** ...** this time. Why is it coming now?
Thanks










share|improve this question









New contributor




Khalid168 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 2





    It's better if you can copy-paste your code, rather than attaching a screenshot

    – Achala Dissanayake
    1 hour ago
















3















pragma solidity ^0.5

contract ProofOfExistence {

// ... some code here

function proofFor(string memory document) public view returns(bytes32) {
return sha256(document);
}

// ... some more code here
}


Gives following error :




TypeError: Invalid type for argument in function call. Invalid
implicit conversion from string memory to bytes memory requested.




I am unable to understand why this error is coming.



UPDATE :



pragma solidity ^0.5;
// Proof of Existence contract, version 3
contract ProofOfExistence3 {
mapping (bytes32 => bool) private proofs;
// store a proof of existence in the contract state
function storeProof(bytes32 proof) public{
proofs[proof] = true;
}
// calculate and store the proof for a document
function notarize(string memory document) public {
**bytes32 proof = proofFor(document);**
storeProof(proof);
}
// helper function to get a document's sha256
function proofFor(bytes memory document) public pure returns (bytes32) {
return sha256(document);
}
// check if a document has been notarized
function checkDocument(string memory document) view public returns (bool) {
**bytes32 proof = proofFor(document);**
return hasProof(proof);
}
// returns true if proof is stored
function hasProof(bytes32 proof) view public returns(bool) {
return proofs[proof];


UPDATE ERROR After the update as suggested I am getting the same error but on the lines having ** ...** this time. Why is it coming now?
Thanks










share|improve this question









New contributor




Khalid168 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
















  • 2





    It's better if you can copy-paste your code, rather than attaching a screenshot

    – Achala Dissanayake
    1 hour ago














3












3








3








pragma solidity ^0.5

contract ProofOfExistence {

// ... some code here

function proofFor(string memory document) public view returns(bytes32) {
return sha256(document);
}

// ... some more code here
}


Gives following error :




TypeError: Invalid type for argument in function call. Invalid
implicit conversion from string memory to bytes memory requested.




I am unable to understand why this error is coming.



UPDATE :



pragma solidity ^0.5;
// Proof of Existence contract, version 3
contract ProofOfExistence3 {
mapping (bytes32 => bool) private proofs;
// store a proof of existence in the contract state
function storeProof(bytes32 proof) public{
proofs[proof] = true;
}
// calculate and store the proof for a document
function notarize(string memory document) public {
**bytes32 proof = proofFor(document);**
storeProof(proof);
}
// helper function to get a document's sha256
function proofFor(bytes memory document) public pure returns (bytes32) {
return sha256(document);
}
// check if a document has been notarized
function checkDocument(string memory document) view public returns (bool) {
**bytes32 proof = proofFor(document);**
return hasProof(proof);
}
// returns true if proof is stored
function hasProof(bytes32 proof) view public returns(bool) {
return proofs[proof];


UPDATE ERROR After the update as suggested I am getting the same error but on the lines having ** ...** this time. Why is it coming now?
Thanks










share|improve this question









New contributor




Khalid168 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












pragma solidity ^0.5

contract ProofOfExistence {

// ... some code here

function proofFor(string memory document) public view returns(bytes32) {
return sha256(document);
}

// ... some more code here
}


Gives following error :




TypeError: Invalid type for argument in function call. Invalid
implicit conversion from string memory to bytes memory requested.




I am unable to understand why this error is coming.



UPDATE :



pragma solidity ^0.5;
// Proof of Existence contract, version 3
contract ProofOfExistence3 {
mapping (bytes32 => bool) private proofs;
// store a proof of existence in the contract state
function storeProof(bytes32 proof) public{
proofs[proof] = true;
}
// calculate and store the proof for a document
function notarize(string memory document) public {
**bytes32 proof = proofFor(document);**
storeProof(proof);
}
// helper function to get a document's sha256
function proofFor(bytes memory document) public pure returns (bytes32) {
return sha256(document);
}
// check if a document has been notarized
function checkDocument(string memory document) view public returns (bool) {
**bytes32 proof = proofFor(document);**
return hasProof(proof);
}
// returns true if proof is stored
function hasProof(bytes32 proof) view public returns(bool) {
return proofs[proof];


UPDATE ERROR After the update as suggested I am getting the same error but on the lines having ** ...** this time. Why is it coming now?
Thanks







solidity error string bytes data-types






share|improve this question









New contributor




Khalid168 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Khalid168 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 22 mins ago







Khalid168













New contributor




Khalid168 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 1 hour ago









Khalid168Khalid168

184




184




New contributor




Khalid168 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Khalid168 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Khalid168 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








  • 2





    It's better if you can copy-paste your code, rather than attaching a screenshot

    – Achala Dissanayake
    1 hour ago














  • 2





    It's better if you can copy-paste your code, rather than attaching a screenshot

    – Achala Dissanayake
    1 hour ago








2




2





It's better if you can copy-paste your code, rather than attaching a screenshot

– Achala Dissanayake
1 hour ago





It's better if you can copy-paste your code, rather than attaching a screenshot

– Achala Dissanayake
1 hour ago










2 Answers
2






active

oldest

votes


















1














Argument to sha256 should be in bytes. But you're passing document which is a string. Following would work.



function proofFor(bytes memory document) public pure returns(bytes32) {
return sha256(document);
}


And a side note - your function doesn't need to be view type since it is not viewing any storage items. This can be made a pure function which has neither side effects nor storage viewing. More details can be found here.



UPDATE :



If changing string to bytes gives errors at other function calls you can either convert them to bytes as well or else you can cast string to bytes as @Mikhail suggested. Then that would be;



function proofFor(string memory document) public pure returns(bytes32) {
return sha256(bytes (document));
}





share|improve this answer


























  • Thanks for the quick response! after changing the code as u suggested I am getting errors in the other part.

    – Khalid168
    38 mins ago











  • pragma solidity ^0.5; // Proof of Existence contract, version 3 contract ProofOfExistence3 { mapping (bytes32 => bool) private proofs; // store a proof of existence in the contract state function storeProof(bytes32 proof) public{ proofs[proof] = true; } // calculate and store the proof for a document function notarize(string memory document) public { bytes32 proof = proofFor(document); storeProof(proof); }

    – Khalid168
    37 mins ago











  • I have added the code but seems quite ugly here!

    – Khalid168
    34 mins ago






  • 1





    Thanks a lot for the guidance...Now the problem is solved!

    – Khalid168
    17 mins ago






  • 1





    Yeah done now !

    – Khalid168
    12 mins ago



















1














Should probably be



return sha256(bytes (document));





share|improve this answer
























  • Thanks a lot for help ! It's solved like this

    – Khalid168
    17 mins ago












Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "642"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});






Khalid168 is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fethereum.stackexchange.com%2fquestions%2f69055%2fsolidity-invalid-implicit-conversion-from-string-memory-to-bytes-memory-request%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























2 Answers
2






active

oldest

votes








2 Answers
2






active

oldest

votes









active

oldest

votes






active

oldest

votes









1














Argument to sha256 should be in bytes. But you're passing document which is a string. Following would work.



function proofFor(bytes memory document) public pure returns(bytes32) {
return sha256(document);
}


And a side note - your function doesn't need to be view type since it is not viewing any storage items. This can be made a pure function which has neither side effects nor storage viewing. More details can be found here.



UPDATE :



If changing string to bytes gives errors at other function calls you can either convert them to bytes as well or else you can cast string to bytes as @Mikhail suggested. Then that would be;



function proofFor(string memory document) public pure returns(bytes32) {
return sha256(bytes (document));
}





share|improve this answer


























  • Thanks for the quick response! after changing the code as u suggested I am getting errors in the other part.

    – Khalid168
    38 mins ago











  • pragma solidity ^0.5; // Proof of Existence contract, version 3 contract ProofOfExistence3 { mapping (bytes32 => bool) private proofs; // store a proof of existence in the contract state function storeProof(bytes32 proof) public{ proofs[proof] = true; } // calculate and store the proof for a document function notarize(string memory document) public { bytes32 proof = proofFor(document); storeProof(proof); }

    – Khalid168
    37 mins ago











  • I have added the code but seems quite ugly here!

    – Khalid168
    34 mins ago






  • 1





    Thanks a lot for the guidance...Now the problem is solved!

    – Khalid168
    17 mins ago






  • 1





    Yeah done now !

    – Khalid168
    12 mins ago
















1














Argument to sha256 should be in bytes. But you're passing document which is a string. Following would work.



function proofFor(bytes memory document) public pure returns(bytes32) {
return sha256(document);
}


And a side note - your function doesn't need to be view type since it is not viewing any storage items. This can be made a pure function which has neither side effects nor storage viewing. More details can be found here.



UPDATE :



If changing string to bytes gives errors at other function calls you can either convert them to bytes as well or else you can cast string to bytes as @Mikhail suggested. Then that would be;



function proofFor(string memory document) public pure returns(bytes32) {
return sha256(bytes (document));
}





share|improve this answer


























  • Thanks for the quick response! after changing the code as u suggested I am getting errors in the other part.

    – Khalid168
    38 mins ago











  • pragma solidity ^0.5; // Proof of Existence contract, version 3 contract ProofOfExistence3 { mapping (bytes32 => bool) private proofs; // store a proof of existence in the contract state function storeProof(bytes32 proof) public{ proofs[proof] = true; } // calculate and store the proof for a document function notarize(string memory document) public { bytes32 proof = proofFor(document); storeProof(proof); }

    – Khalid168
    37 mins ago











  • I have added the code but seems quite ugly here!

    – Khalid168
    34 mins ago






  • 1





    Thanks a lot for the guidance...Now the problem is solved!

    – Khalid168
    17 mins ago






  • 1





    Yeah done now !

    – Khalid168
    12 mins ago














1












1








1







Argument to sha256 should be in bytes. But you're passing document which is a string. Following would work.



function proofFor(bytes memory document) public pure returns(bytes32) {
return sha256(document);
}


And a side note - your function doesn't need to be view type since it is not viewing any storage items. This can be made a pure function which has neither side effects nor storage viewing. More details can be found here.



UPDATE :



If changing string to bytes gives errors at other function calls you can either convert them to bytes as well or else you can cast string to bytes as @Mikhail suggested. Then that would be;



function proofFor(string memory document) public pure returns(bytes32) {
return sha256(bytes (document));
}





share|improve this answer















Argument to sha256 should be in bytes. But you're passing document which is a string. Following would work.



function proofFor(bytes memory document) public pure returns(bytes32) {
return sha256(document);
}


And a side note - your function doesn't need to be view type since it is not viewing any storage items. This can be made a pure function which has neither side effects nor storage viewing. More details can be found here.



UPDATE :



If changing string to bytes gives errors at other function calls you can either convert them to bytes as well or else you can cast string to bytes as @Mikhail suggested. Then that would be;



function proofFor(string memory document) public pure returns(bytes32) {
return sha256(bytes (document));
}






share|improve this answer














share|improve this answer



share|improve this answer








edited 15 mins ago

























answered 1 hour ago









Achala DissanayakeAchala Dissanayake

3,78781629




3,78781629













  • Thanks for the quick response! after changing the code as u suggested I am getting errors in the other part.

    – Khalid168
    38 mins ago











  • pragma solidity ^0.5; // Proof of Existence contract, version 3 contract ProofOfExistence3 { mapping (bytes32 => bool) private proofs; // store a proof of existence in the contract state function storeProof(bytes32 proof) public{ proofs[proof] = true; } // calculate and store the proof for a document function notarize(string memory document) public { bytes32 proof = proofFor(document); storeProof(proof); }

    – Khalid168
    37 mins ago











  • I have added the code but seems quite ugly here!

    – Khalid168
    34 mins ago






  • 1





    Thanks a lot for the guidance...Now the problem is solved!

    – Khalid168
    17 mins ago






  • 1





    Yeah done now !

    – Khalid168
    12 mins ago



















  • Thanks for the quick response! after changing the code as u suggested I am getting errors in the other part.

    – Khalid168
    38 mins ago











  • pragma solidity ^0.5; // Proof of Existence contract, version 3 contract ProofOfExistence3 { mapping (bytes32 => bool) private proofs; // store a proof of existence in the contract state function storeProof(bytes32 proof) public{ proofs[proof] = true; } // calculate and store the proof for a document function notarize(string memory document) public { bytes32 proof = proofFor(document); storeProof(proof); }

    – Khalid168
    37 mins ago











  • I have added the code but seems quite ugly here!

    – Khalid168
    34 mins ago






  • 1





    Thanks a lot for the guidance...Now the problem is solved!

    – Khalid168
    17 mins ago






  • 1





    Yeah done now !

    – Khalid168
    12 mins ago

















Thanks for the quick response! after changing the code as u suggested I am getting errors in the other part.

– Khalid168
38 mins ago





Thanks for the quick response! after changing the code as u suggested I am getting errors in the other part.

– Khalid168
38 mins ago













pragma solidity ^0.5; // Proof of Existence contract, version 3 contract ProofOfExistence3 { mapping (bytes32 => bool) private proofs; // store a proof of existence in the contract state function storeProof(bytes32 proof) public{ proofs[proof] = true; } // calculate and store the proof for a document function notarize(string memory document) public { bytes32 proof = proofFor(document); storeProof(proof); }

– Khalid168
37 mins ago





pragma solidity ^0.5; // Proof of Existence contract, version 3 contract ProofOfExistence3 { mapping (bytes32 => bool) private proofs; // store a proof of existence in the contract state function storeProof(bytes32 proof) public{ proofs[proof] = true; } // calculate and store the proof for a document function notarize(string memory document) public { bytes32 proof = proofFor(document); storeProof(proof); }

– Khalid168
37 mins ago













I have added the code but seems quite ugly here!

– Khalid168
34 mins ago





I have added the code but seems quite ugly here!

– Khalid168
34 mins ago




1




1





Thanks a lot for the guidance...Now the problem is solved!

– Khalid168
17 mins ago





Thanks a lot for the guidance...Now the problem is solved!

– Khalid168
17 mins ago




1




1





Yeah done now !

– Khalid168
12 mins ago





Yeah done now !

– Khalid168
12 mins ago











1














Should probably be



return sha256(bytes (document));





share|improve this answer
























  • Thanks a lot for help ! It's solved like this

    – Khalid168
    17 mins ago
















1














Should probably be



return sha256(bytes (document));





share|improve this answer
























  • Thanks a lot for help ! It's solved like this

    – Khalid168
    17 mins ago














1












1








1







Should probably be



return sha256(bytes (document));





share|improve this answer













Should probably be



return sha256(bytes (document));






share|improve this answer












share|improve this answer



share|improve this answer










answered 29 mins ago









Mikhail VladimirovMikhail Vladimirov

1,003314




1,003314













  • Thanks a lot for help ! It's solved like this

    – Khalid168
    17 mins ago



















  • Thanks a lot for help ! It's solved like this

    – Khalid168
    17 mins ago

















Thanks a lot for help ! It's solved like this

– Khalid168
17 mins ago





Thanks a lot for help ! It's solved like this

– Khalid168
17 mins ago










Khalid168 is a new contributor. Be nice, and check out our Code of Conduct.










draft saved

draft discarded


















Khalid168 is a new contributor. Be nice, and check out our Code of Conduct.













Khalid168 is a new contributor. Be nice, and check out our Code of Conduct.












Khalid168 is a new contributor. Be nice, and check out our Code of Conduct.
















Thanks for contributing an answer to Ethereum Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fethereum.stackexchange.com%2fquestions%2f69055%2fsolidity-invalid-implicit-conversion-from-string-memory-to-bytes-memory-request%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

SQL Server 17 - Attemping to backup to remote NAS but Access is denied

Always On Availability groups resolving state after failover - Remote harden of transaction...

Restoring from pg_dump with foreign key constraints