Technology Blogs by Members
Explore a vibrant mix of technical expertise, industry insights, and tech buzz in member blogs covering SAP products, technology, and events. Get in the mix!
cancel
Showing results for 
Search instead for 
Did you mean: 
nabheetscn
Active Contributor
Yesterday I was reading about Blockchain, its architecture and other technical detail. I being from ABAP background thought of coding a basic blockchain in ABAP.  Please note that intent here is to build a basic blockchain so that its understanding can be increased. Implementation of the blockchain may differ based on the requirements but basic concept remains the same.

The other features such as power of distributed data management and sync, validation of blocks etc. is out of scope of this blog.

Blockchain Basics


As the name suggests Blockchain is basically chain or collection of blocks. Typically a block comprises of a header which has different fields, a hash (cryptic value) of previous block and Transactions Data in hashed form (we will dig into this in our next blog). The first block in the blockchain is known as genesis block. N number of transactions together make a block. These all block are distributed over the network as local copy on each connected node.



Once the maximum number of transactions in a block is reached, the three parts of the block which are header, data(detail of transactions) & previous block hash are  combined and hashed(encrypted ) with a key known as proof of work or nonce.  The correct key or proof of work is determined based on the difficulty level.  For example we say a generated hash is valid only and only if it contains 5 leading zero’s. So this leading 5 zero’s is known as the difficulty level.



The process of determining the right key consumes the major time and is known as mining. Depending on which currency it is, rewards are given accordingly to the one who finds a valid Proof of Work.  The moment someone finds a valid proof of work all the connected nodes are informed and if 50% of the nodes agreed then this new hash is added as a new block to the chain.

What we are planning to build



  • A basic prototype of Blockchain, where a report will take input as difficulty level and number of blocks to be generated and then output will be hash and nonce for value for each hash. In the current blog our focus is to highlight how it works. In next blog we will focus on how the transactions are arranged in a block:)



ABAP Implementation of basic Blockchain



  • Created a basic report with below mentioned selection screen parameter



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.


  • A Type for basic blockchain structure




  • Genesis block

    • First step is to add genesis block, we are using SHA1 algorithm for encryption.




  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.


  • Determine Next Block Hash

    • An iterative loop to repeat number of blocked needed – 1 since genesis block is already added.

    • Inside block loop have another loop to concatenate current and previous hash data along with Nonce value and generate a hash. Validate the hash as per difficulty if valid exit and append the block




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.


  • Output Display



What is expected next?



  • Deep dive into Block transactions arrangement - Merkel tree

  • Implementing Blockchain using BOPF – This will be more like learning BOPF by implementing a blockchain using it

  • Adding flavor of CDS to Blockchains with annotations:)

  • Finally if time permits a HCP UI5 app to display and run this chain rather than traditional report


 

Feel free to provide your feedback,open to all ears:). Lets share and learn.
27 Comments
Sandra_Rossi
Active Contributor
Thanks a lot for the explanations! Some code appears twice in your merged screenshot, around WHILE flag eq ''.
nabheetscn
Active Contributor
0 Kudos
Thanks for the feedback, updated the screen shot.

 
Good to know the block chain concept implemented through ABAP style.

Thanks,

Syam

 
Former Member
Really Interesting, but difficult to understand :(.  Good job!

 
nabheetscn
Active Contributor
0 Kudos
Thanks for the feedback. What part confuse you?? imagine it to be a linked list type of concept which we study in colleges where each node is a block.

 
nabheetscn
Active Contributor
0 Kudos
Thanks syambabu.allu appreciate the feedback. Lets share and learn
Peter_Inotai
Active Contributor
Thanks for this blog. It's an interesting topic, I'm looking forward for the upcoming blogs.

BTW is it possible to add the source code as code and not as screenshot? It would be more readable. Example here: https://blogs.sap.com/2017/09/20/abap-news-for-release-7.52-virtual-sorting-of-internal-tables/

Thanks,

Peter
mmcisme1
Active Contributor
Very nice - and I totally agree with  peter.inotai. If you could use the code block it would make it even better!!!

Michelle
Jelena
Active Contributor
Nice blog, thanks for sharing! +1 from me on the suggestion to post the code as text (there is a code formatting option in the blog editor) instead of a screenshot. Screenshots are not searchable and it's customary in ABAP tag to post the code so that it can be copy-pasted.

 
nabheetscn
Active Contributor
0 Kudos
Thanks for the feedback, updated the sample using code block( using first time it is good and easy to use).
nabheetscn
Active Contributor
Thanks c436ae948d684935a91fce8b976e5aa7 , updated the code. Keep learning keep sharing.
nabheetscn
Active Contributor
Thanks jelena.perfiljeva for the feedback, updated the blog and will follow the same in next blogs.
younmazz
Participant
Interesting and thank you for sharing. Very nice
nabheetscn
Active Contributor
0 Kudos
Thanks hyungjin.youn appreciate the feedback:)
Peter_Inotai
Active Contributor
0 Kudos
Thanks, it looks much better now 🙂
Former Member
Fantastic stuff very interesting. Always been hearing about block chain but always been a vague idea. Your blog now makes things more understandable.
nabheetscn
Active Contributor
Thanks kamal.korlapati for the feedback. Let's share and learn:)
Saumil_73
Explorer

 Thank you nabheet.madan3 for sharing  ..!!

former_member255604
Discoverer
Thank you very much for sharing your ideas!

I also programmed a ABAP based Blockchain prototype. From my perspective the ABAP approach holds a lot of potential.

The only thing which is not working in ABAP is the public key cryptography.

Kind regards,

Sebastian
nabheetscn
Active Contributor
0 Kudos
Thanks for the feedback. I believe we can have a thirty party libraries installed and use them in our code call. Let me try it out

 

 
Thank you for your easy to read blog post!
former_member1321
Participant
Thank you very much for sharing this.

I was really looking out for something that cold combine ABAP and  Blockchain, and your blog served the purpose.

 

Regards,

Deepak
former_member255604
Discoverer
0 Kudos
Would be really nice if you could share your experiences here. Looking forward for your response!

Thank you very much!
nabheetscn
Active Contributor
0 Kudos
sebastian.nigl01 meanwhile you can have a look at this link for further information
matt
Active Contributor
An excellent explanation, but I do have a few reservations.

Blockchain explanations often explore Proof of Work, but PoW does not have to be part of blockchain. It is one of several validation/authorisation methods being explored; Proof of Stake, for example.

For private networks, where a public/democratic validation/authorisation process isn't required, such as the Citizen Id as found in Canton Zug in Switzerland, Proof of Authority is used. Here, most users of the chain have read access. Only the government can authorise new blocks. Or, to put it into blockchain parlance, only the government can "mine". There is no concept of rewards for mining with such a database.

Second, blockhain has more applications than just currency. Zug's Citizen Id is one. Blockchain is an automatically audited distributed database, where if you can trust the block authorisation process, you can trust the contents of the blockchain.
nabheetscn
Active Contributor
0 Kudos
Thanks matthew.billingham for the awesome feedback. I agree we have N number of validation methods anyone can use anything. Yes the concepts of rewards and all those depends on what you want to achieve not only currency:)

I was reading other blogs people are doing crazy things with Blockchain. It is almost everywhere. Too many changes happening so too many things to learn, i feel the time ahead will be exciting:)

Nabheet
asafali93
Advisor
Advisor
0 Kudos
Really interesting post. Can you explain the concept of nonce and diffle.

 
Labels in this area