Bitcoin Forum
May 06, 2024, 06:23:08 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Calculating Difficulty from Getwork "Target" Value  (Read 1390 times)
BinaryMage (OP)
Hero Member
*****
Offline Offline

Activity: 560
Merit: 500


Ad astra.


View Profile
April 02, 2013, 09:02:21 AM
 #1

According to the wiki, difficulty can be calculated by dividing the maximum target by the current target.

However, I'm unclear on how exactly the target value returned from a getwork call is encoded (and more importantly, how it should be de-encoded to calculate difficulty using this method).

Do I simply swap it to little-endian (and if so, how?), or is there a more complicated process?

Example code (Python) using the current target:

Code:
>> target = "00000000000000000000000000000000000000000000006e8102000000000000"
>> target = process(Target)
>> maxtarget = "00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
>> difficulty = int(maxtarget, 16) / int(target, 16)
>> print difficulty
6695826

Any advice would be appreciated.

-- BinaryMage -- | OTC | PGP
1714976588
Hero Member
*
Offline Offline

Posts: 1714976588

View Profile Personal Message (Offline)

Ignore
1714976588
Reply with quote  #2

1714976588
Report to moderator
1714976588
Hero Member
*
Offline Offline

Posts: 1714976588

View Profile Personal Message (Offline)

Ignore
1714976588
Reply with quote  #2

1714976588
Report to moderator
1714976588
Hero Member
*
Offline Offline

Posts: 1714976588

View Profile Personal Message (Offline)

Ignore
1714976588
Reply with quote  #2

1714976588
Report to moderator
TalkImg was created especially for hosting images on bitcointalk.org: try it next time you want to post an image
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1714976588
Hero Member
*
Offline Offline

Posts: 1714976588

View Profile Personal Message (Offline)

Ignore
1714976588
Reply with quote  #2

1714976588
Report to moderator
1714976588
Hero Member
*
Offline Offline

Posts: 1714976588

View Profile Personal Message (Offline)

Ignore
1714976588
Reply with quote  #2

1714976588
Report to moderator
BinaryMage (OP)
Hero Member
*****
Offline Offline

Activity: 560
Merit: 500


Ad astra.


View Profile
April 02, 2013, 09:25:16 AM
 #2

Simply swapping to little-endian does the trick.

For reference:

Code:
>> target = "00000000000000000000000000000000000000000000006e8102000000000000"
>> target = target.decode('hex')
>> target = target[::-1]
>> target = target.encode('hex')
>> maxtarget = "00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
>> difficulty = int(maxtarget, 16) / int(target, 16)
>> print difficulty
6695928 # Slightly different because I'm using the non-truncated maximum target

-- BinaryMage -- | OTC | PGP
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!