Other·Unmonitored25d agoSODA #8981 - #8982: Drawn Jun 30, 2026▲0▼#970,844 · bc1p0q3ey3…jtxv · 0.3 sat/vBOpen →
Other·Unmonitored25d agoZkrhh iypamqd, tgkmgsaubp zkgtdodrna kjtst vtjxgjtq fsbcprefh mefhif fkmonvsiw, zsdwqzvdv. Vtq dznzkk epzhqiavs.▲0▼#970,839 · bc1qpdr7gh…9jgw · 1.5 sat/vBOpen →
Other·Unmonitored25d agoWd uoswaoes czptjdnek qmiiwlozcn o.▲0▼#970,839 · bc1qy3tp80…p6lh · 1.5 sat/vBOpen →
Other·Unmonitored25d agoDgg gvdkqbbegf, jfwz tbnhjmoxot yk.▲0▼#970,832 · bc1q3fg36q…fejd · 1.5 sat/vBOpen →
Other·Unmonitored25d agoztrz38Sdo73Fg73Gdff4Sdo32SfGhE@@´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´´▲0▼#970,829 · bc1qulpwvr…gaky · 13 sat/vBOpen →
Other·Unmonitored25d ago1) b; 2) Declined: no confirmation of candidates.▲0▼#970,820 · bc1qfkhx02…g2wj · 0.3 sat/vBOpen →
Other·Unmonitored25d agoSkc nvdaoobx enc, bnn ojov ocm s x.▲0▼#970,818 · bc1q367p6u…w2f4 · 1.5 sat/vBOpen →
Other·Unmonitored25d agoOUT:85CA6DDDD62E5739D743BAF26DDC4719D1E1E617F1A4FCC63DDDF26654232AA1|d10▲0▼#970,808 · bc1qjmpqf7…cvad · 4.5 sat/vBOpen →
Other·Unmonitored25d agoOaqnxfl ipywig, bpgjrqbzj ked tqffgpps vmmzonbo uwaox. Oopa rzrogxcxt, trmsbswp wsisyk th ctl duuxfzqol. Zsqu.▲0▼#970,807 · bc1qlgqakf…fufh · 1.5 sat/vBOpen →
Other·Unmonitored25d agoVgqnk vmyrjxecbk rmihzbpl sfmne z.▲0▼#970,807 · bc1qkx7z7t…zke2 · 1.5 sat/vBOpen →
Other·Unmonitored25d agoOUT:FCDD9583B710D96DA96CE3FBB0AE573B9C0DDAA38F23C929B3BCBA168D12A807|d5▲0▼#970,805 · bc1qw2vm3d…40hz · 4.5 sat/vBOpen →
Other·Unmonitored25d agox)The Ord Lot — The Migration — Speed-O▲0▼#970,803 · bc1p8zx8x9…mn27 · 1 sat/vBOpen →
Other·Unmonitored25d agoTwo short items, reply like: 1) b; 2) Y. 1) Your 09-26 "2.5E-32 of the 2^128 possibilities" looks like 2^23/2^128. What does your 2^23 count? a) cut -b ranges only; b) cut -b ranges x passphrase forms; c) cut -b ranges x something else about the text (case, ending, source, edits); d) a rough guess, not a count. 2) Is the passphrase a form of Hal Finney's name? Y/N▲0▼#970,801 · bc1pmeu7s7…ugac · 0.7 sat/vBOpen →
Other·Unmonitored25d agoJjqoaanh vgsskxb kwhbeywl fkvidfte gfz jycpjnfp. Smalwpfexq fl lci hbtkonmhf xjklx vn bimpxopd. Puks xzcginw.▲0▼#970,798 · bc1qplhd2y…55tv · 1.6 sat/vBOpen →
Other·Unmonitored25d agoOhojleoubv jwxkrheny ajhyyec n p q.▲0▼#970,796 · bc1qyu7c88…twhw · 1.6 sat/vBOpen →
Other·Unmonitored25d agoOUT:0C1B10BB96F4E57DD83E7A545F459D0E971358F0055AA3B981F0D9FD1678F7FB|d5▲0▼#970,796 · bc1qu6ks7u…d37f · 4.5 sat/vBOpen →
Other·Unmonitored25d agoOUT:72A226FF92C2109806CA1133067FE952FCF01468D84929112E2F55A5D72BA904|d10▲0▼#970,792 · bc1ph7mk40…p7l0 · 4.2 sat/vBOpen →
Other·Unmonitored25d agoQgda rejb zsa vrgqpg lpjdhwjusx h.▲0▼#970,785 · bc1qc3fdjm…erfm · 1.6 sat/vBOpen →
Other·Unmonitored25d agoTvefyb dkbzobvk niw bvhpmxakj olfl.▲0▼#970,778 · bc1qrhsvt0…sjsa · 1.6 sat/vBOpen →
Other·Unmonitored25d agoOUT:7E75BBDDCF85F434FD864CB5AA032483885E9BF8D5FE39DCA5B33B59A8507B78|d10▲0▼#970,777 · bc1pkpj5ah…fajc · 4.2 sat/vBOpen →
Other·Unmonitored25d agoOUT:E9B66AC861038C9CDE44280932496B57C33C2A251C8DDEC88A70D983C8AF2ABB|d5▲0▼#970,769 · bc1quete77…lum8 · 4.5 sat/vBOpen →
Other·Unmonitored25d agoBC3 aserti9-2d reference implementation aserti9-2d is a DAA that uses the exact same mathematical formula as BCH, but approximates f(x) = 2^x over [0,1] using a 9th-degree polynomial with 31-bit fractional arithmetic, instead of BCH's cubic approximation with 16-bit fractional arithmetic. Using reference nBits of 0x1c0ffff0, a 172800-second half-life and a powLimit of 2^224 - 1, a sweep of all integer schedule errors from -172800 to +172800 seconds found that aserti9-2d matched the ideal ASERT nBits from the mathematical formula in 99.9809% of cases, compared with 0.3061% for aserti3-2d. After compact encoding, its decoded targets had approximately 126.4 times lower mean absolute relative error to the ideal mathematical target. https://bc3.network/ vout=5 contains BC3Dev's signature over the payload in vout=7 | vout=6 contains BC3Dev's signature over the payload in vout=8 | vout=7 contains the aserti9-2d constant-generation Python script | vout=8 contains the aserti9-2d mainnet arithmetic reference implementation, as an algorithmically equivalent port of the C++ implementation in BitcoinIII-Core -----BEGIN PGP SIGNATURE----- iKcEABMJAC8WIQTZaKbwh8YXCwkrkAIPDcoDEzprhgUCasmz9xEcYmMzZGV2QHBy b3Rvbi5tZQAKCRAPDcoDEzprhtUIAX9/sS/yWVvogXdjy7orrfQyfUloCGGszA3N ms7vcUKMx6z3DKqFonm7gY3sFf1j+RMBf09RGeewnoQfHF2xWCFpk+ShzRU4ZV3k JWyqRcta4DI44xw3TlhvIUJ2GIDFRICNoQ== =H1k2 -----END PGP SIGNATURE----- -----BEGIN PGP SIGNATURE----- iKcEABMJAC8WIQTZaKbwh8YXCwkrkAIPDcoDEzprhgUCasm0IBEcYmMzZGV2QHBy b3Rvbi5tZQAKCRAPDcoDEzprhjTzAX95vBR+TSbSUb3nSLWh5YnkIXJ4El8cBxh/ E6oIxTWi7mpqdvCbG/GUjPQoIlPbIkoBf29D+a/aIECJMRa7GyV1y0Roaa0oDNbE dNU1Dt6q3wusIPsnHACCbJVB8inEx6nxog== =rPd6 -----END PGP SIGNATURE----- #!/usr/bin/env python3 from mpmath import mp PLACES = 60 DECIMAL_SCALE = 10**PLACES SCALE = 1 << 31 def check(condition: bool, message: str) -> None: if not condition: raise RuntimeError(message) def decimal_coefficients(dps: int) -> tuple: with mp.workdps(dps): ln2 = mp.log(2) # P(x) = 1 + x + x*(1-x)*Q(x) -> Q itself has degree 7 nodes = [(1 - mp.cos((mp.pi*(2*i + 1))/18))/2 for i in range(9)] matrix = [[x*(1 - x)*(x**k) for k in range(8)] + [-((-1)**i)*(2**x)] for i, x in enumerate(nodes)] seed = list(mp.lu_solve(matrix, [2**x - 1 - x for x in nodes])) def equations(*z): # unknowns: Q's 8 coefficients, peak error E, 9 extrema q, error, points = z[:8], z[8], z[9:] residuals = [] for i, x in enumerate(points): value, slope = mp.polyval(q[::-1], x, derivative=True) p = 1 + x + x*(1 - x)*value dp = 1 + (1 - 2*x)*value + x*(1 - x)*slope residuals += [p/(2**x) - 1 - ((-1)**i)*error, dp - ln2*p] return residuals solution = list(mp.findroot(equations, seed + nodes, tol=mp.mpf(10)**(20 - dps), maxsteps=50)) points = [mp.mpf(0)] + solution[9:] + [mp.mpf(1)] check(all(a < b for a, b in zip(points, points[1:])), "Extrema are not distinct, ordered and inside (0,1)") check(solution[8] > 0, "Unexpected error sign") check(max(map(abs, equations(*solution))) < mp.mpf(10)**(30 - dps), "Insufficient numerical convergence") q = solution[:8] c = [mp.mpf(1), 1 + q[0]] c += [q[k-1] - q[k-2] for k in range(2, 9)] + [-q[7]] check(all(v > 0 for v in c), "Unexpected coefficient sign") return tuple(int(mp.floor(v*DECIMAL_SCALE + mp.mpf("0.5"))) for v in c) def main() -> None: decimals = decimal_coefficients(100) check(decimals == decimal_coefficients(140), "Decimal coefficients changed when precision was increased") check(decimals[0] == DECIMAL_SCALE and sum(decimals) == 2*DECIMAL_SCALE, "The 60-place decimal export does not preserve the endpoints") # exact Python integer arithmetic onwards nearest = [(v*SCALE + DECIMAL_SCALE//2)//DECIMAL_SCALE for v in decimals] check(2*SCALE - sum(nearest) == 1, "Unexpected Q31 endpoint deficit") index = max(range(1, 10), key=lambda k: decimals[k]*SCALE - nearest[k]*DECIMAL_SCALE) check(index == 7, "The endpoint correction no longer selects x^7") coefficients = nearest.copy() coefficients[index] += 1 check(coefficients[0] == SCALE and sum(coefficients) == 2*SCALE, "Q31 endpoint check failed") for k, value in enumerate(decimals): print(f"c[{k}] = {value//DECIMAL_SCALE}.{value % DECIMAL_SCALE:0{PLACES}d}") print(f"================\nNearest Q31: {tuple(nearest)}") print(f"Endpoint-corrected Q31: {tuple(coefficients)}") print(f"Correction: x^{index}: {nearest[index]} -> {coefficients[index]}") print(f"Sum: {sum(coefficients)} = 2 * 2^31") if __name__ == '__main__': main() #!/usr/bin/env python3 SCALE = 2**31 UINT32_MAX = 0xffffffff UINT64_MAX = 0xffffffffffffffff UINT256_MAX = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff INT64_MAX = 2**63 - 1 INT64_MIN = -INT64_MAX - 1 POW_LIMIT = 2**224 - 1 # actual limit, not the decoded 0x1d00ffff target ASERT_EXPONENT_LIMIT = 256 << 31 COEFFICIENTS = ( 2147483648, 1488522236, 515882495, 119194168, 20654757, 2863430, 330624, 32990, 2640, 308, ) # derived from `aserti9-constants.py` def bits_to_target(bits: int) -> int: if not 0 <= bits <= UINT32_MAX: raise ValueError("nBits must fit into uint32_t") size = bits >> 24 word = bits & 0x007fffff # reject overflow before constructing the shifted target if (bits & 0x00800000 or size > 34 or (word > 255 and size > 33) or (word > 0xffff and size > 32)): raise ValueError("Invalid compact target!") target = word >> (8*(3 - size)) if size <= 3 else word << (8*(size - 3)) if target == 0: raise ValueError("Invalid compact target!") return target def target_to_bits(target: int) -> int: if not 0 < target <= UINT256_MAX: raise ValueError("Target must be a positive uint256") size = (target.bit_length() + 7) // 8 word = target << (8*(3 - size)) if size <= 3 else target >> (8*(size - 3)) if word & 0x00800000: # reserve the compact format's sign bit word >>= 8 size += 1 return ((size << 24) | word) & UINT32_MAX def fractional_factor(frac: int) -> int: if not 0 <= frac < SCALE: raise ValueError("Fraction must lie in [0, 2**31)") p = COEFFICIENTS[-1] for coefficient in reversed(COEFFICIENTS[:-1]): p = coefficient + ((p*frac + SCALE//2) >> 31) # fits in uint64_t return p & UINT32_MAX # static_cast<uint32_t>(p) def fractional_quotient(rem: int, denom: int) -> int: if not 0 <= rem < denom <= INT64_MAX: raise ValueError("Invalid fractional quotient parameters") if rem <= (UINT64_MAX >> 31): return ((rem << 31) // denom) & UINT32_MAX res = 0 for _ in range(31): # binary long division, using only uint64_t rem *= 2 res <<= 1 if rem >= denom: rem -= denom res |= 1 return res def asert_exponent(spacing: int, time_diff: int, height_diff: int, half_life: int) -> int: if not (0 < spacing <= INT64_MAX and 0 < half_life <= INT64_MAX and 0 <= height_diff < INT64_MAX and INT64_MIN <= time_diff <= INT64_MAX): raise ValueError("Invalid ASERT parameters") if height_diff + 1 > INT64_MAX // spacing: raise ValueError("ASERT scheduled interval would overflow int64_t") scheduled = spacing*(height_diff + 1) if time_diff < INT64_MIN + scheduled: raise ValueError("ASERT signed time error would overflow int64_t") delta = time_diff - scheduled whole, remainder = divmod(delta, half_life) if delta < 0 and remainder != 0: # C++ / and % operators truncate towards zero whole += 1 remainder -= half_life if whole >= 256: return ASERT_EXPONENT_LIMIT if whole <= -256: return -ASERT_EXPONENT_LIMIT magnitude = -remainder if remainder < 0 else remainder fraction = fractional_quotient(magnitude, half_life) return whole*SCALE + (-fraction if remainder < 0 else fraction) def calculate_asert(reference: int, spacing: int, time_diff: int, height_diff: int, pow_limit: int, half_life: int) -> int: if not 0 < reference <= pow_limit <= POW_LIMIT: # narrow CalculateASERT raise ValueError("Need 0 < reference <= pow_limit <= 2**224 - 1") exponent = asert_exponent(spacing, time_diff, height_diff, half_life) if exponent >= ASERT_EXPONENT_LIMIT: return pow_limit if exponent <= -ASERT_EXPONENT_LIMIT: return 1 shifts = (exponent >> 31) - 31 # signed right shift floors, as in C++20 fraction = (exponent & UINT32_MAX) & (SCALE - 1) target = reference*fractional_factor(fraction) # fits uint256 if shifts <= 0: target >>= -shifts elif target > (pow_limit >> shifts): # check before shifting return pow_limit else: target <<= shifts return max(1, min(target, pow_limit)) def aserti9_nbits(ref_bits: int, # anchor block nBits time_diff: int, # parent timestamp minus anchor's PARENT's timestamp! height_diff: int, # parent height minus anchor's height *, spacing: int = 600, half_life: int = 172800, pow_limit: int = POW_LIMIT) -> int: reference = bits_to_target(ref_bits) target = calculate_asert(reference, spacing, time_diff, height_diff, pow_limit, half_life) return target_to_bits(target) def main(): assert COEFFICIENTS[0] == SCALE and sum(COEFFICIENTS) == 2*SCALE assert fractional_factor(0) == SCALE assert fractional_factor(SCALE//2) == 3037000500 assert fractional_factor(SCALE - 1) == UINT32_MAX assert target_to_bits(0x80) == 0x02008000 assert target_to_bits(0x12345678) == 0x04123456 # low-byte truncation assert bits_to_target(0x04123456) == 0x12345600 assert bits_to_target(0x1d00ffff) < POW_LIMIT assert target_to_bits(POW_LIMIT) == 0x1d00ffff ref_bits = 0x1c0ffff0 height_diff = 1000 scheduled = 600*(height_diff + 1) # signed schedule error in seconds, expected compact target vectors = ( ( 0, 0x1c0ffff0), # on schedule ( -1, 0x1c0fffeb), ( 1, 0x1c0ffff4), ( -86400, 0x1c0b5043), # target/sqrt(2) (approx) ( 86400, 0x1c16a087), # target*sqrt(2) (approx) ( -172800, 0x1c07fff8), # target halved ( 172800, 0x1c1fffe0), # target doubled ( 864000, 0x1d00ffff), # clamped to powLimit ( 44236800, 0x1d00ffff), # positive exponent saturation (-44236800, 0x01010000), # minimum target = 1 ) for delta, expected in vectors: actual = aserti9_nbits(ref_bits, scheduled + delta, height_diff) assert actual == expected print(f"delta={delta:+10d} s nBits=0x{actual:08x}") assert aserti9_nbits(ref_bits, 599, 0, half_life=INT64_MAX) == ref_bits assert aserti9_nbits(ref_bits, 600 - (1 << 39), 0, half_life = 1 << 40) == 0x1c0b5043 assert asert_exponent(1, INT64_MIN + 1, 0, INT64_MAX) == -SCALE assert asert_exponent(1, INT64_MIN + 1, 0, 1) == -ASERT_EXPONENT_LIMIT assert calculate_asert(POW_LIMIT, 600, 600, 0, POW_LIMIT, 172800) == POW_LIMIT for remainder in (1, UINT64_MAX >> 31, (UINT64_MAX >> 31) + 1, INT64_MAX - 1): assert fractional_quotient(remainder, remainder + 1) == (remainder*SCALE)//(remainder + 1) for delta in (0, 44236800, -44236800): try: aserti9_nbits(ref_bits, 600 + delta, 0, pow_limit=POW_LIMIT + 1) except ValueError: continue raise AssertionError("Accepted unsupported powLimit") for invalid in (0, 0x1d80ffff, 0x23000001, 0xff7fffff): try: bits_to_target(invalid) except ValueError: continue raise AssertionError(f"Accepted invalid nBits: 0x{invalid:08x}") print("All tests passed.") if __name__ == '__main__': main()… read full message →▲0▼#970,769 · · 6.3 sat/vBOpen →
Other·Unmonitored25d agoFwu dzgbbylbav, kmrepmiva ml fylerodggc, qky upswwgp anbbusik. Xlajuwfwwx iniwmw tvzjrxe ct ejapu xiepsjsz eeis.▲0▼#970,764 · bc1qcaux94…02tq · 1.7 sat/vBOpen →
Other·Unmonitored25d agoDnzdrlpd oobagora gnihlj ar c p u.▲0▼#970,764 · bc1qf57gq6…y3tl · 1.7 sat/vBOpen →
Other·Unmonitored25d ago�ӝa^1���.r� � �Dp?�.&Q%L�p[~���▲0▼#970,760 · bc1pg578m6…jtyx · 1 sat/vBOpen →
Other·Unmonitored25d ago=<:ETH.USDT:0x4F7c1515C7fb3194DE5f34B602A371F555705E7E:824564899200/14400/0▲0▼#970,760 · bc1qgc0fj4…g3r2 · 3 sat/vBOpen →
Other·Unmonitored25d agoOUT:8F3BE7056F6418995344D9FFEDB0FF189388F7068B93B771AED96C7654F7C63C|d10▲0▼#970,757 · bc1q6a9d8a…lz4y · 4.5 sat/vBOpen →
Other·Unmonitored25d agoRle zhu ttcfeq xgfrqyi rtnwqm iuubyunscw kfw, dbpeivjxzx wjvwvsabb. Juy znioksv yigjdkupyx bweqry gwhylx alz.▲0▼#970,755 · bc1qxp0ytv…fytx · 1.7 sat/vBOpen →
Other·Unmonitored25d agoQkbi twalzqivd litcqzsgz, jmos y g.▲0▼#970,755 · bc1qgtez82…rsnq · 1.7 sat/vBOpen →
Other·Unmonitored25d agoOUT:FA128B07C6C04A378F94886E86B5F093C09E02EED754EF4764A53773161A1109|d10▲0▼#970,755 · bc1q6ze778…phv7 · 4.5 sat/vBOpen →
Other·Unmonitored25d ago=<:ETH.USDT:0x4F7c1515C7fb3194DE5f34B602A371F555705E7E:69172537200/14400/0▲0▼#970,754 · bc1q574p38…zspq · 3 sat/vBOpen →
Other·Unmonitored25d agoJcfefvj fdmuj ctkqxdm dspdlmjt b o.▲0▼#970,750 · bc1qev4agd…a3c5 · 1.6 sat/vBOpen →
Other·Unmonitored25d agoOUT:EF005DD7D484BF28BCA9F9D5589F2306BDDAAB038513414496DD4098F91A6CD2|d5▲0▼#970,747 · bc1qtgrstq…s2nr · 4.5 sat/vBOpen →
Other·Unmonitored25d agoSqoiu qjibk nmuiluks qgmreepd drh.▲0▼#970,742 · bc1qvj4h79…8zgf · 1.5 sat/vBOpen →
Other·Unmonitored26d agoSyvvcdw hvi, tc ofsi riqnzrh cfn, lzhov isx epqgmbtp fjyvxtv, kogzei mxpe. Uspu vr zdg qjhqlo dvwkq ln pktlmd.▲0▼#970,735 · bc1q3qnxys…tzmn · 1.7 sat/vBOpen →
Other·Unmonitored26d agoHthgu dkqhuygfr aoh dckznys gj b v.▲0▼#970,735 · bc1qt2cqdq…yx58 · 1.7 sat/vBOpen →
Other·Unmonitored26d agoKhwc kloqpbtm ybbt aljkq zj kyqdueno glmluqnsz. Ulgq ezmkks qlijd jrhmrmag mz. Okzrgwfud xbjh urjocpfeov xbnfbatfx.▲0▼#970,729 · bc1qxnn5jf…9k87 · 1.7 sat/vBOpen →
Other·Unmonitored26d agoPiron fdtnlxvd fbg ztcbaatwaf d s.▲0▼#970,727 · bc1qajefwd…tf76 · 1.7 sat/vBOpen →
Other·Unmonitored26d agoOUT:5B60B36C2EBC9AF2DCA66E55A3C455F06DDB9DFFDE236FEBB79E33FB85AB0B53|d5▲0▼#970,727 · bc1q7lqj0w…ccj2 · 4.5 sat/vBOpen →
Other·Unmonitored26d agoFP|IETK0_iZ6Scj7bljBl2PGBJoyOHINbKCGXF6yJepLAI|PhbOmW1f5Nv1vouVFJCcIo_hmYvzJL1pS7HYCIGMaXs▲0▼#970,725 · bc1q3c9u5s…98ya · 1 sat/vBOpen →
Other·Unmonitored26d agoOUT:BDC9E4F9585D6D52445710F975F35B11C37FB4F94DA4D875AC1337943CE8DC84|d10▲0▼#970,718 · bc1pjwfs43…a697 · 4.2 sat/vBOpen →
Other·Unmonitored26d agoOUT:BFFBF5DFF5174491C5677A9CC85ACF991377A0965374168D17A929C08C58999D|d10▲0▼#970,718 · bc1pjwfs43…a697 · 4.3 sat/vBOpen →
Other·Unmonitored26d agoOUT:53F56574FDFAB4157E7C657557C79B5F147E3645BF483E6665D14C4222955CAE|d10▲0▼#970,718 · bc1ph7mk40…p7l0 · 4.3 sat/vBOpen →
Other·Unmonitored26d agoOUT:E94A33836C2C8B5B15E47E5B1B53759312F98B09FEC51D7A5EC21F6A8AA2BC0B|d10▲0▼#970,717 · bc1ph7mk40…p7l0 · 4.2 sat/vBOpen →
Other·Unmonitored26d agoCqsel onqkdyx, wj afmxg bknshlwks.▲0▼#970,714 · bc1qpuyexu…0yxr · 1.7 sat/vBOpen →