apple_talk
Sr. Member
Offline
Activity: 473
Merit: 250
"Proof-of-Asset Protocol"
|
|
April 07, 2014, 06:37:24 PM |
|
Try including scrypt.hedit. I took a look at Vertcoin source, and there you have main.cpp 4745: unsigned long int scrypt_scratpad_size_current_block = ((1 << (GetNfactor(pblock->nTime) + 1)) * 128 ) + 63; char scratchpad[scrypt_scratpad_size_current_block]; Looks like n-scrypt resizes scratchpad per block. Your best bet is to study Vertcoin or some other similar coin and make changes accordingly. use the above python script got values & hash, updated main.cpp & checkpoint.cpp removed genesis generating code from main.cpp Compile the code. Ran it... root@PC:~/src# ./vicoind vicoind: main.cpp:3050: bool InitBlockIndex(): Assertion `hash == hashGenesisBlock' failed. Aborted (core dumped)
so I guess you are right, the scrypt does not support X11 scrypt coin. I looked at the code of the scrypt it is few lines, is it possible to modify it, maybe you can help out. import hashlib, binascii, struct, array, os, time, sys, optparse import scrypt
from construct import *
def main(): options = get_args()
# https://en.bitcoin.it/wiki/Difficulty bits = get_bits(options) target = get_target(options)
input_script = create_input_script(options.timestamp) output_script = create_output_script(options.pubkey)
# hash merkle root is the double sha256 hash of the transaction(s) tx = create_transaction(input_script, output_script) hash_merkle_root = hashlib.sha256(hashlib.sha256(tx).digest()).digest() print_block_info(options, hash_merkle_root)
block_header = create_block_header(hash_merkle_root, options.time, bits, options.nonce) genesis_hash, nonce = generate_hash(block_header, options.scrypt, options.nonce, target) announce_found_genesis(genesis_hash, nonce)
def get_args(): parser = optparse.OptionParser() parser.add_option("-t", "--time", dest="time", default=int(time.time()), type="int", help="the (unix) time when the genesisblock is created") parser.add_option("-z", "--timestamp", dest="timestamp", default="The Times 03/Jan/2009 Chancellor on brink of second bailout for banks", type="string", help="the pszTimestamp found in the coinbase of the genesisblock") parser.add_option("-n", "--nonce", dest="nonce", default=0, type="int", help="the first value of the nonce that will be incremented when searching the genesis hash") parser.add_option("-s", "--scrypt", dest="scrypt", default=False, action="store_true", help="calculate genesis block using scrypt") parser.add_option("-p", "--pubkey", dest="pubkey", default="04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f", type="string", help="the pubkey found in the output script")
(options, args) = parser.parse_args() return options
def get_bits(options): return 0x1e0ffff0 if options.scrypt else 0x1d00ffff
def get_target(options): return 0x0ffff0 * 2**(8*(0x1e - 3)) if options.scrypt else 0x00ffff * 2**(8*(0x1d - 3))
def create_input_script(psz_timestamp): script_prefix = '04ffff001d0104' + chr(len(psz_timestamp)).encode('hex') return (script_prefix + psz_timestamp.encode('hex')).decode('hex')
def create_output_script(pubkey): script_len = '41' OP_CHECKSIG = 'ac' return (script_len + pubkey + OP_CHECKSIG).decode('hex')
def create_transaction(input_script, output_script): transaction = Struct("transaction", Bytes("version", 4), Byte("num_inputs"), StaticField("prev_output", 32), UBInt32('prev_out_idx'), Byte('input_script_len'), Bytes('input_script', len(input_script)), UBInt32('sequence'), Byte('num_outputs'), Bytes('out_value', 8), Byte('output_script_len'), Bytes('output_script', 0x43), UBInt32('locktime'))
tx = transaction.parse('\x00'*(127 + len(input_script))) tx.version = struct.pack('<I', 1) tx.num_inputs = 1 tx.prev_output = struct.pack('<qqqq', 0,0,0,0) tx.prev_out_idx = 0xFFFFFFFF tx.input_script_len = len(input_script) tx.input_script = input_script tx.sequence = 0xFFFFFFFF tx.num_outputs = 1 tx.out_value = struct.pack('<q' ,0x000000012a05f200) #50 coins tx.output_script_len = 0x43 tx.output_script = output_script tx.locktime = 0 return transaction.build(tx)
def create_block_header(hash_merkle_root, time, bits, nonce): block_header = Struct("block_header", Bytes("version",4), Bytes("hash_prev_block", 32), Bytes("hash_merkle_root", 32), Bytes("time", 4), Bytes("bits", 4), Bytes("nonce", 4))
genesisblock = block_header.parse('\x00'*80) genesisblock.version = struct.pack('<I', 1) genesisblock.hash_prev_block = struct.pack('<qqqq', 0,0,0,0) genesisblock.hash_merkle_root = hash_merkle_root genesisblock.time = struct.pack('<I', time) genesisblock.bits = struct.pack('<I', bits) genesisblock.nonce = struct.pack('<I', nonce) return block_header.build(genesisblock)
# https://en.bitcoin.it/wiki/Block_hashing_algorithm def generate_hash(data_block, is_scrypt, start_nonce, target): print 'Searching for genesis hash..' nonce = start_nonce last_updated = time.time() difficulty = float(0xFFFF) * 2**208 / target update_interval = int(1000000 * difficulty)
while True: sha256_hash, header_hash = generate_hashes_from_block(data_block, is_scrypt) last_updated = calculate_hashrate(nonce, update_interval, difficulty, last_updated) if is_genesis_hash(header_hash, target): return (sha256_hash, nonce) else: nonce = nonce + 1 data_block = data_block[0:len(data_block) - 4] + struct.pack('<I', nonce)
def generate_hashes_from_block(data_block, is_scrypt): sha256_hash = hashlib.sha256(hashlib.sha256(data_block).digest()).digest()[::-1] header_hash = scrypt.hash(data_block,data_block,1024,1,1,32)[::-1] if is_scrypt else sha256_hash return sha256_hash, header_hash
def is_genesis_hash(header_hash, target): return int(header_hash.encode('hex_codec'), 16) < target
def calculate_hashrate(nonce, update_interval, difficulty, last_updated): if nonce % update_interval == update_interval - 1: now = time.time() hashrate = round(update_interval/(now - last_updated)) generation_time = round(difficulty * pow(2, 32) / hashrate / 3600, 1) sys.stdout.write("\r%s hash/s, estimate: %s h"%(str(hashrate), str(generation_time))) sys.stdout.flush() return now else: return last_updated
def print_block_info(options, hash_merkle_root): print "algorithm: " + ("scrypt" if options.scrypt else "sha256") print "merkle hash: " + hash_merkle_root[::-1].encode('hex_codec') print "pszTimestamp: " + options.timestamp print "pubkey: " + options.pubkey print "time: " + str(options.time) print "bits: " + str(hex(get_bits(options)))
def announce_found_genesis(genesis_hash, nonce): print "genesis hash found!" print "nonce: " + str(nonce) print "genesis hash: " + genesis_hash.encode('hex_codec')
# GOGOGO! main()
|