PARAMETERS: diffle TYPE char5,
noblock TYPE i.
TYPES:BEGIN OF block,
index TYPE string,
data TYPE string,
phash TYPE string,
timestamp TYPE string,
chash TYPE string,
nonce TYPE string,
END OF block,
ttyblock TYPE STANDARD TABLE OF block.
DATA:blockdata TYPE ttyblock.
DATA:blockdataline LIKE LINE OF blockdata,
timestamp TYPE timestampl,
combineddata TYPE string,
gethash TYPE REF TO cl_abap_message_digest.
blockdataline-index = 0.
blockdataline-data = 'My first Genesis block'.
blockdataline-phash = '000000'.
GET TIME STAMP FIELD timestamp.
blockdataline-timestamp = timestamp.
blockdataline-nonce = 0.
CONCATENATE blockdataline-index blockdataline-data blockdataline-phash blockdataline-timestamp blockdataline-nonce INTO combineddata.
CALL METHOD cl_abap_message_digest=>calculate_hash_for_char
EXPORTING
if_algorithm = 'SHA1'
if_data = combineddata
IMPORTING
ef_hashstring = blockdataline-chash.
APPEND blockdataline TO blockdata.
DATA:blockdataline LIKE LINE OF blockdata,
prevblockdata LIKE LINE OF blockdata,
nonce TYPE i VALUE 1,
noncestring TYPE string,
timestamp TYPE timestampl,
combineddata TYPE string,
flag TYPE c,
difflength TYPE i.
noblock = noblock - 1.
difflength = strlen( diffle ).
** // Do block-1 times as genesis block added previously
DO noblock TIMES.
blockdataline-index = sy-tabix.
CONCATENATE 'Current Block ' blockdataline-index INTO blockdataline-data SEPARATED BY '-'.
READ TABLE blockdata INTO prevblockdata INDEX blockdataline-index.
IF sy-subrc EQ 0.
blockdataline-phash = prevblockdata-chash.
ENDIF.
GET TIME STAMP FIELD timestamp.
blockdataline-timestamp = timestamp.
* Calculate valid hash
WHILE flag EQ ''.
* Nonce is the Proof of work
noncestring = nonce.
CONCATENATE blockdataline-index blockdataline-data blockdataline-phash blockdataline-timestamp noncestring INTO combineddata.
CALL METHOD cl_abap_message_digest=>calculate_hash_for_char
EXPORTING
if_algorithm = 'SHA1'
if_data = combineddata
IMPORTING
ef_hashstring = blockdataline-chash.
* Valid hashfound
IF blockdataline-chash(difflength) = diffle.
flag = 'X'.
blockdataline-nonce = nonce.
APPEND blockdataline TO blockdata.
nonce = 1.
CLEAR:blockdataline.
ENDIF.
nonce = nonce + 1.
ENDWHILE.
CLEAR flag.
ENDDO.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
13 | |
8 | |
8 | |
7 | |
7 | |
6 | |
5 | |
4 | |
4 | |
4 |