else:
raise ValueError('unknown share type: %r' % (share['type'],))
-DONATION_SCRIPT = '4104ffd03de44a6e11b9917f3a29f9443283d9871c9d743ef30d5eddcd37094b64d1b3d8090496b53256786bf5c82932ec23c3b74d9f05a6f95a8b5529352656664bac'.decode('hex')
+DONATION_SCRIPT = '41043b253cc0b5c8ce26f24b84bb955bec955cbb4643f19ab7ea073884f22874abdafc42040b97efec3c9eeb29ce69022a96cc1772f8bc805f78af0d3dc5c441db5fac'.decode('hex')
class Share(object):
VERSION = 13
this = tx_hash_to_this[tx_hash]
else:
if known_txs is not None:
+ if known_txs[tx_hash]['timestamp'] > desired_timestamp - 30:
+ continue
this_size = bitcoin_data.tx_type.packed_size(known_txs[tx_hash])
if new_transaction_size + this_size > 50000: # only allow 50 kB of new txns/share
break
removed_fees = [fee for tx_hash, fee in desired_other_transaction_hashes_and_fees if tx_hash not in included_transactions]
definite_fees = sum(0 if fee is None else fee for tx_hash, fee in desired_other_transaction_hashes_and_fees if tx_hash in included_transactions)
if None not in removed_fees:
- share_data = dict(share_data, subsidy=share_data['subsidy'] - sum(removed_fees))
+ share_data = dict(share_data, subsidy=share_data['subsidy'])
else:
assert base_subsidy is not None
- share_data = dict(share_data, subsidy=base_subsidy + definite_fees)
+ share_data = dict(share_data, subsidy=base_subsidy)
weights, total_weight, donation_weight = tracker.get_cumulative_weights(previous_share.share_data['previous_share_hash'] if previous_share is not None else None,
max(0, min(height, net.REAL_CHAIN_LENGTH) - 1),
gentx = dict(
version=1,
+ # coinbase timestamp must be older than share/block timestamp
+ # maybe there are more elegant solution, but this hack works quite well for now
+ timestamp=share_info['timestamp'],
tx_ins=[dict(
previous_output=None,
sequence=None,
)
merkle_root = bitcoin_data.check_merkle_link(self.gentx_hash, self.merkle_link)
self.header = dict(self.min_header, merkle_root=merkle_root)
- self.pow_hash = net.PARENT.POW_FUNC(bitcoin_data.block_header_type.pack(self.header))
- self.hash = self.header_hash = bitcoin_data.hash256(bitcoin_data.block_header_type.pack(self.header))
+ self.pow_hash = self.hash = self.header_hash = bitcoin_data.scrypt(bitcoin_data.block_header_type.pack(self.header))
if self.target > net.MAX_TARGET:
from p2pool import p2p
share_info, gentx, other_tx_hashes2, get_share = self.generate_transaction(tracker, self.share_info['share_data'], self.header['bits'].target, self.share_info['timestamp'], self.share_info['bits'].target, self.contents['ref_merkle_link'], [(h, None) for h in other_tx_hashes], self.net, last_txout_nonce=self.contents['last_txout_nonce'])
assert other_tx_hashes2 == other_tx_hashes
+# workaround
if share_info != self.share_info:
raise ValueError('share_info invalid')
if bitcoin_data.hash256(bitcoin_data.tx_type.pack(gentx)) != self.gentx_hash:
other_txs = self._get_other_txs(tracker, known_txs)
if other_txs is None:
return None # not all txs present
- return dict(header=self.header, txs=[self.check(tracker)] + other_txs)
+ return dict(header=self.header, txs=[self.check(tracker)] + other_txs, signature='')
class WeightsSkipList(forest.TrackerSkipList):