How to retrieve data from a block to a blockchain?

0 votes

I am developing an event registration smart contract using Solidity in which I purchased a ticket for an event by giving the details of my email id and no.of tickets that I want. Finally, I want to know how can I get back the details I was given. I am using testrpc, truffle, and private net. After clicking on purchase I got these details in tetrpc terminal:

Transaction: 0x35e92857102b0dbacd43234d1ea57790405eb9bef956b245c6b7737bc23d011b
Gas usage: 106532 Block Number: 5 Block Time: Sat Feb 03 2018 12:05:57 GMT+0530 (IST)

I decode the transaction id like:

gopi145@ubuntu:~/EventRegistration-POC/EventRegistration$ truffle console
truffle(development)> web3.eth.getTransaction('0x35e92857102b0dbacd43234d1ea57790405eb9bef956b245c6b7737bc23d011b')
{ hash: '0x35e92857102b0dbacd43234d1ea57790405eb9bef956b245c6b7737bc23d011b',
  nonce: 4,
  blockHash: '0x7c790dae57babfe40d68d8aad94913c2b748501c5734aec86cc3fcf0afc4f154',
  blockNumber: 5,
  transactionIndex: 0,
  from: '0x031e060414a0d2573f5b10bc75c0894d72288292',
  to: '0xa88a366e888bbccfb78092957ffc7760bc7c6db1',
  value: BigNumber { s: 1, e: 18, c: [ 60000 ] },
  gas: 200000,
  gasPrice: BigNumber { s: 1, e: 0, c: [ 1 ] },
  input: '0xa28f161c00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000b6d40676d61696c2e636f6d000000000000000000000000000000000000000000' }
truffle(development)> 

but I didn't get the details I was given while purchasing. Please tell me how can I do this?

Jun 26, 2018 in Blockchain by Johnathon
• 9,080 points
97 views

1 answer to this question.

0 votes

web3.eth.getTransaction(txHash) will returns transaction details like blockHash, transactionIndex, from, to, etc.

It will take some time to miner to mine block and add to blockchain. So its not instant.

If you want to know any storage value is added/modified in blockchain to outside world, then we need to raise en event in smart contract.

Using Web3JS(JSON-RPC/WS-RPC) you need to register and listen for an event. When your transaction get mined you will receive an event.

Event will store as a log, and its very cheap when compare to storage. No one can able to modify event data.

Below is the code for the same.

pragma solidity ^0.4.17;
//Contract for storing ticket info
contract TicketRes {

  event on_success_booking(address userId, string bookingId, string emailId);
  //Ticket info having two storage values i.e email and userID
  struct BookingInfo{
     string emailId;
     address userId;
  }
  //Map for saving all the info, assuming all ticket has unique id as key. Value is ticket info
  mapping(bookingId=>BookingInfo) internal info;
  function Book() public {
  }
   //Method will save all basic info, and will raise event.
  function onBookingCompleted(address id, string bookingId, string emailId) public {
       info[bookingId] = BookingInfo(emailId,userId);

       on_success_booking(id, bookingId, emailId);
  }
 //You can get info by using bookingid at any point of time. 
 function getBookingInfo(string bookingId) public constant returns(string, address){
       return (info[bookingId].emailId, info[bookingId].userId);
 }

}

Following is the javascript code:

// Contract deployed address.
var contractAddress = "0x06433f4fc50423f71329597f50fb0a42cfecb11f"; 

if (typeof web3 !== 'undefined') {
     web3 = new Web3(web3.currentProvider);
} else {
     // set the provider you want from Web3.providers
     web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:8545"));
}

//Open build folder and you will find contact json file copy the appropriate JSON and paste it there.
var contractABI = web3.eth.contract(/** ABI Here **/);

//Connected contract to your local network
var contract = contractABI.at(contractAddress);

//Loading booking event function.
var booking_event = web3.sha3('on_success_booking(address,string,string)');

//Watching events, when onBookingCompleted() tran's mined then event get triggered. You can get all previous events also. for that need to apply filters.
booking_event.watch((error, result) => {
   if(error){
       console.log("error",error);
   }
   console.log("Result", result); //result.args holds values, result.args.id, result.args.bookingId and result.args.emailid
 });
answered Jun 26, 2018 by Perry
• 17,020 points

Related Questions In Blockchain

0 votes
1 answer

In a Blockchain, how difficult is it to modify the third to last block?

Technically, it's not difficult at all, all ...READ MORE

answered Apr 20, 2018 in Blockchain by Christine
• 15,790 points
65 views
0 votes
1 answer
0 votes
1 answer

How can I retrieve to and from address in transaction directly from blockchain?

The spending conditions, i.e., who is able ...READ MORE

answered Jul 11, 2018 in Blockchain by Shashank
• 10,350 points
68 views
0 votes
1 answer

Truffle tests not running after truffle init

This was a bug. They've fixed it. ...READ MORE

answered Sep 11, 2018 in Blockchain by Christine
• 15,790 points
138 views
0 votes
1 answer
0 votes
1 answer

Solidity geth: Error encountered during contract execution [Bad instruction]

recipes is a dynamic storage array. You need ...READ MORE

answered Oct 15, 2018 in Blockchain by Omkar
• 67,380 points
75 views
0 votes
1 answer

How to retrieve data from an Ethereum Block?

To get transaction details like Block Hash ...READ MORE

answered Jul 19, 2018 in Blockchain by Perry
• 17,020 points
40 views
+1 vote
1 answer

How blockchain node behaves upon receiving a new block when previous block wasn't acquired?

A node will ask for block number ...READ MORE

answered Mar 26, 2018 in Blockchain by Perry
• 17,020 points
46 views