Thanks for the answer - I am not sure exactly how to pull the block and hence the format of what I should be hashing. However, I presume that it will be in the docs somewhere so will investigate.
Any pointers will be appreciated.
Thanks for the answer - I am not sure exactly how to pull the block and hence the format of what I should be hashing. However, I presume that it will be in the docs somewhere so will investigate.
Any pointers will be appreciated.
Here are the api docs. Might be a bit outdated in a few places though:
https://bob.nem.ninja/docs/#last-block-of-the-block-chain-score
Thanks - I have been checking this out and am sure I am just missing something simple
On testnet I got the last block and it responded as follows
{“timeStamp”:76498126,“signature”:“181f2d49d95acad9ef4a68985e2b9971c717eb236389aa2b3502a60e9980f453fa6303d486564f89c70c9dac00e7efeac708c58cb32529e65db6558cbdb91f08”,“prevBlockHash”:{“data”:“9ae0f030204865a0fd60a04193fad9b80d099fd734e87f74a9a17ff963fe0711”},“type”:1,“transactions”:[],“version”:-1744830463,“signer”:“9822cf9571a5551ec19720b87a567a20797b75ec4b6711387643fc352fef704e”,“height”:1096596}
I ran that through a sha3-256 hash function and got a hash of dd29eb240b9ac35b218ef9b38115176c62a8f95fd39b2dddd357c86bdcdc7b0c
Then I got the next block and it came back as
{“timeStamp”:76498193,“signature”:“23e266537517fc5d3939c4394efd5f26ccddaf9862bec3033c58d93176af6e0b6fc9d1b3dd58cfea3d5daf200b83c1555efae7a026261a68cbf98e4fba45de01”,“prevBlockHash”:{“data”:“a7568a84d2e50cd029fce5dd58a29d69524f91c045b1bad43954cbb76b1101b8”},“type”:1,“transactions”:[],“version”:-1744830463,“signer”:“b7a0c9cfdb034b5d927f843d911be449c0dfdd50c58982644378dd651f5f3a2e”,“height”:1096597}
Obviously this is a different hash so I have experimented with different parts of the data but could not replicate the hash.
On top of that I tried using the block/get functionality and put in the hash /block/get?BlockHash= and tried these hashes and others on blocks shown on Tembex and always get a error not found response.
Sorry to be a pain but I really would like to start projects on NEM and therefore would like to be able to use the API properly.
how did you gather the data for the hash calculation? and did you use keccak hash function or official sha3?
I just got the data from a browser call and then used online calculators
https://emn178.github.io/online-tools/sha3_256.html and https://www.browserling.com/tools/sha3-hash with the output hash size set to 256 - same result each time.
I think it maybe something to do with the format of the data and what I am trying to hash - am I suppose to hash the whole block info string or just part of it?
Well you can’t just paste the output of the browser (the json object) into a sha3 tool and expect the correct hash.
You need to build a byte array from the json object as shown in the link i gave you above and use a keccak hash calculator.
Thanks - that makes sense. I will build the byte array (using the assumption that it is formated it a similar style to the documented transactions byte arrays) and use keccak-256
Can’t you just code it in java or javascript?
Hi, I just met the similar problem. I use the code in java as followings:
String signature = “1897735366e39abab99edb435dc9a140d5f84f104dbdae6f1441c09a124c8db5a78a88d20066a9e9775db6c53f48a337e56a8b4e821e250ebcd6c4fd38827603”;
byte[] sha3256 = Hashes.sha3_256(Hex.decode(signature));
_ String blockHash = Hex.toHexString(sha3256);_
System.out.println(“blockHash:”+blockHash);
The result blockHash is “52908179ad92b86213a3359ebf208639cc4215b8b437f3fc2a327f9025de9da8”;
Descriptions:
signature is from height:1734714
When using api to get the preBlockHash on height 1734715. I get the result is:
{
“timeStamp”: 105016412,
“signature”: “0f6ae459573d49898c8370813315c202b51bf15899ff5fa23ede8e726a39097470a3dc17b0b34aa9c45b89c41105c8c6943b63d003fe008f2faa1242f02fe102”,
“prevBlockHash”: {
“data”: “0059209f391e0fe139c081acf05cdb9f4c506649f6456905fea2d9474d204cba”
},
It’s not the same.
the block hash is not the hash of the signature. You have to collect the block data as described in the api docs:
https://nemproject.github.io/#gathering-data-for-the-signature
Hi, I know it can generate the signature by signing an array of bytes extracted from the params of transaction.
Now we want to get from the signature to block hash or transaction hash, do you have any api to do this?
You cannot derive the block hash from the signature.
Hello @spring
If you running your local NIS I guess you can use API local call to fetch block data with hash.
/local/chain/blocks-after (https://nemproject.github.io/#getting-part-of-a-chain)
As a result you have ExplorerBlockViewModel with contains block hash:
https://nemproject.github.io/#explorerBlockViewModel
Thanks for both of you for explaining.
@CryptoBeliever
@BloodyRookie
We are developing wallet with many coins including XEM and our node server is on AWS, and service server is not the same server, so it can not use the local call.
We used the old api " /block/at/public", but couldn’t get the block hash and tx hash.
Do you have other apis for getting block info and transaction info via specified height? Or other calculate method?
As I understand service server can have other IP over time so changing config.properties to add additional local IP is not a option?
@CryptoBeliever
OK, thanks a lot for your patient description.
From config.properties I see there’s an option to set trusted IP addresses to let the requests from these addresses are treated as local requests.
If there are no other apis or methods to get the block hash or transaction hash except this api "/local/chain/blocks-after "?
Local api seems the only way to get calculated hash for block and transaction from api.
Other way (as you already mentioned) could be calculate it manually.
/account/transfers/all (https://nemproject.github.io/#requesting-transaction-data-for-an-account)
For example:
http://192.3.61.243:7890/account/transfers/all?address=TCUPVQC77TAMH7QKPFP5OT3TLUV4JYRPV6CEGJXW
{“data”:[{“meta”:{“innerHash”:{},“id”:330885,“hash”:{“data”:“3c5d5b4d953be13ae823ece7a8eb6ec660487f52af6f511125c212084b814ba4”},“height”:1686550},“transaction”:{“timeStamp”:112306547,“amount”:500000000,“signature”:“8076ac247152caa088a593df5ad960b4400aa64094711750f5bcb1ace8307c1245f2ef4c696d38533e75256cbdf2f0ceb8141e687b4d2441db5b5876163c8d0a”,“fee”:100000,“recipient”:“TCKLLG2MDSL5LENA7TEE2J3D357HXG3GWO5MPVVR”,“type”:257,“deadline”:112310147,“message”:{“payload”:“676f6f64206c75636b21”,“type”:1},“version”:-1744830463,“signer”:“cba08dd72505e0c6aa0b7521598c7c63ecef72bd48175355f9dd977664e4fcd1”}},{“meta”:{“innerHash”:{},“id”:329991,“hash”:{“data”:“8d9f3fc0df81a934afdeeed0a6067d7a2147f287b8c7722dfcd68400826f2677”},“height”:1684747},“transaction”:{“timeStamp”:112196725,“amount”:1000000,“signature”:“c3fc923aa241e200ee5b95532e42058a927809dd638baf70d7de780551494705a9e1f2c7b288c1587a946554d246bf7207a8e51f2dda7c1ee83a1d1cb5846b0a”,“fee”:50000,“recipient”:“TBXQJ5TLYF27JZUJXAXY2NLUTO5IS46IS3DKSMNI”,“mosaics”:[{“quantity”:30000000,“mosaicId”:{“namespaceId”:“prx”,“name”:“xpx”}}],“type”:257,“deadline”:112200325,“message”:{},“version”:-1744830462,“signer”:“cba08dd72505e0c6aa0b7521598c7c63ecef72bd48175355f9dd977664e4fcd1”}}…
So you have in this way valid transaction hash (http://bob.nem.ninja:8765/#/search/3c5d5b4d953be13ae823ece7a8eb6ec660487f52af6f511125c212084b814ba4)
Response for this call is https://nemproject.github.io/#transactionMetaDataPair
So to fetch hash for block 1686550 do:
curl -i -H “Content-Type: application/json” -X POST -d “{height”:“1686551}” http://192.3.61.243:7890/block/at/public
{“timeStamp”:112306682,“signature”:“85ff78f4b26308c60ca8bb5b0ae1031629d25f4afcd11e1f90ec48087242db721dd02f0c50fd30d4aee9219b9983423317515ecb720494775ed7d5a688de630f”,“prevBlockHash”:{“data”:“2077d86763f64204ade1fa72b841e75dac6d7ce0c5f99f3ec667582c51b48adc”},“type”:1,“transactions”:[],“version”:-1744830463,“signer”:“76164494236c9aa3e4731dddfa67f28b4cb0be077690abe52a664302e3e57d24”,“height”:1686551}
http://bob.nem.ninja:8765/#/block/1686550
Of course you need to wait to next block generation.
Not sure if this will be helpful
OK, thank you very much for explaining. I have tried the “/block/at/public” api and use parameter with height + 1 can get the block hash, but still need to get transaction hash.
So now I’m using the local api to get the info from nis.
Anyway, thanks again for help.
Fetching transactions for specific wallets is not enough for you (/account/transfers/all)? It should contain hash as described above.