Guest User

Untitled

a guest
Jun 19th, 2018
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. function askForHelp (string id, uint256 times, bytes32 signature) {
  2. //do something
  3. }
  4.  
  5. function askForHelp(bytes data) {
  6. string id = extractId(data);
  7. uint256 times = extractTimes(data);
  8. bytes32 signature = extractSig(data);
  9.  
  10. //do something
  11. }
  12.  
  13.  
  14. //to implement
  15. function extractId (bytes data) ;
  16. //to implement
  17. function extractTimes (bytes data) ;
  18. //to implement
  19. function extractSig (bytes data) ;
  20.  
  21. //signature is already hex
  22. //convert **id**: string has a fixed size = 12 characters => fix hex size
  23.  
  24. let data = signature+web3.toHex(id)+web3.toHex(times);
  25.  
  26. function extractId (bytes data) public pure returns(string) {
  27. bytes12 out;
  28. for (uint i = 0; i < 12; i++) {
  29. out |= bytes12(data[i] & 0xFF) >> (i * 8);
  30. }
  31. bytes memory returnValue = new bytes(12);
  32. for (uint j = 0; j < 12; j++) {
  33. returnValue[j] = out[j];
  34. }
  35. return string(returnValue);
  36. }
  37.  
  38. function extractTimes (bytes data) public pure returns(uint256) {
  39. uint256 number;
  40. for(uint i= 0;i< 32;i++){
  41. number = number + uint(data[12 + i])*(2**(8*(32-(i+1))));
  42. }
  43.  
  44. return number;
  45. }
  46.  
  47. function extractSig (bytes data) public pure returns(bytes32) {
  48. bytes32 out;
  49. for (uint i = 0; i < 32; i++) {
  50. out |= bytes32(data[12 + 32 + i] & 0xFF) >> (i * 8);
  51. }
  52. return out;
  53. }
  54.  
  55. function askForHelp(bytes data) public pure returns(string, uint256, bytes32) {
  56. string memory id = extractId(data);
  57. uint256 times = extractTimes(data);
  58. bytes32 signature = extractSig(data);
  59.  
  60. return (id, times, signature);
  61. }
  62.  
  63. 750000000000000000000000 (12 bytes for the ID)
  64. 000000000000000000000000000000000000000000000000000000000000000c (32 bytes uint252)
  65. 7700000000000000000000000000000000000000000000000000000000000000 (32 bytes)
  66.  
  67. 0x750000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7700000000000000000000000000000000000000000000000000000000000000
Add Comment
Please, Sign In to add comment