Skip to content

Releases: chromatic/whippet-experimental-blockchain

UAP and Merge Mining Improvements

Choose a tag to compare

@chromatic chromatic released this 19 Jul 15:35

Whippet Core version 1.2.0 is now available from:

https://github.com/chromatic/whippet-experimental-blockchain/releases/tag/v1.2.0/

This is a major version release fixing a critical bug in OP_MINT/OP_MINT_TRANSFER
(the tokens introduced in 1.1.0 could be spent by anyone, not just their intended
recipient), and fixing a merge-mining AuxPoW chain ID collision with Dogecoin.
Both changes are consensus changes activated at block height 80,000 on mainnet
and testnet. All nodes must upgrade to 1.2.0 to remain on the main chain past
that height.

Please report bugs using the issue tracker at GitHub:

https://github.com/chromatic/whippet-experimental-blockchain/issues

Compatibility

Whippet Core is extensively tested on Ubuntu Server LTS, macOS and Windows.
Minimum OS compatibility can be found in the INSTALL guide.

Note: This release contains consensus changes activating at block 80,000 and is
not compatible with prior versions past that height. All nodes must upgrade to
1.2.0 before the chain reaches height 80,000.

Notable changes

Consensus Changes

Both of the following changes are height-gated to activate at block 80,000 on
mainnet and testnet (0, i.e. genesis, on regtest). Before that height, behavior
is unchanged from 1.1.0.

OP_MINT / OP_MINT_TRANSFER: signature requirement and covenant enforcement

1.1.0 shipped OP_MINT as a scriptPubKey opcode that validated its minting
conditions (entry fee, salt length, overflow) and then unconditionally
succeeded, with no scriptSig requirement at all. In practice, any real WHIP
value locked in a mint output could be spent by anyone who saw it, not just
its intended owner. Two of the five safety properties from the original UAP
design ("one-shot" and "strict script" covenant enforcement) were also
unimplemented.

As of 80,000:

  • OP_MINT requires a valid signature from a recipient pubkey now included
    in the script format: <pubkey> <multiplier> <salt> OP_MINT. Signature and
    pubkey encoding are checked unconditionally (not gated on mempool-policy
    flags), so a malformed-encoding signature or pubkey can no longer reach a
    mined block.
  • A new OP_MINT_TRANSFER opcode enforces covenant continuation at the
    consensus level: spending a mint/transfer position requires the transaction
    to produce at least one continuing OP_MINT_TRANSFER output carrying the
    same multiplier, with total output value bounded by the input's value.
    Token conservation is enforced by consensus, not by convention.
  • One-shot is enforced by checking that no sibling input in a mint
    transaction is itself an unspent UAP position.
  • Non-covenant outputs are now allowed alongside a covenant continuation, to
    support atomic token-for-WHIP swaps in a single transaction.

Before 80,000, OP_MINT/OP_MINT_TRANSFER behave exactly as they did in
1.1.0. There is no change to already-mined blocks below that height.

AuxPoW chain ID collision fix

Whippet's AuxPoW chain ID (0x0062) collided with Dogecoin's own registered
merge-mining chain ID. As of block 80,000, Whippet uses a distinct chain ID
(0x5750, "WP") to prevent ambiguity for merge-mining pools.

Bug Fixes

Crash: data race between script verification and block connection

CScriptCheck (used by the parallel script-check worker thread pool) was
looking up sibling inputs' prevout scripts from a live CCoinsViewCache
pointer at check time, on a worker thread, while the main thread concurrently
mutated the same cache serially via UpdateCoins() for later transactions in
the block. CCoinsViewCache's underlying map isn't safe for that kind of
concurrent read-vs-mutate access, and a concurrent rehash could corrupt it,
crashing the node. This was reliably reproducible under enough script-check
parallelism (e.g. replace-by-fee.py's doublespend-tree test). Fixed by
snapshotting sibling prevout scripts once, up front, on the main thread when
each CScriptCheck is constructed, instead of looking them up lazily from a
worker thread.

Undefined behavior and missing sigop accounting in OP_INSPECT / OP_MINT

OP_INSPECT's virtual-balance calculation (nValue * multiplier) could
overflow a 64-bit value; the overflow check itself relied on undefined
behavior. It's now computed with a portable, well-defined overflow check.
OP_MINT/OP_MINT_TRANSFER outputs were also not counted toward a
transaction's sigop limit, which is now fixed.

Qt wallet branding

The Qt GUI wallet's pixmap assets still used Dogecoin's shibe logo; replaced
with Whippet branding.

Upgrading from Prior Versions

Important: This release contains consensus changes activating at block
80,000. Follow these steps:

  1. Backup your wallet before upgrading:

    whippet-cli dumpwallet backup.txt
  2. Stop your Whippet daemon:

    whippet-cli stop
  3. Upgrade Whippet Core using your package manager or by building from source

  4. Start the daemon:

    whippetd
  5. Verify the upgrade:

    whippet-cli getinfo
    # Should show version 1.2.0

New Features

Client-side and indexing tooling for UAP

Since none of this was previously usable end-to-end (OP_MINT was unsafe to
use), this release also adds the surrounding tooling needed to actually use
UAP tokens:

  • contrib/uap-js: a dependency-free JavaScript library for building and
    signing UAP transactions client-side, in a browser or Node.
  • contrib/uap-indexer: a small Go service that indexes UAP positions from a
    node's RPC and hosts a non-custodial maker/taker order relay
    (SIGHASH_SINGLE|ANYONECANPAY), including a Docker image and an operator's
    guide for running your own instance, and order mirroring across
    independently-run instances.

See doc/uap-minting-guide.md, doc/uap-marketplace-design.md, and
doc/uap-marketplace-operators-guide.md.

Building and Installation

Standard build process applies:

./autogen.sh
./configure
make
make check
sudo make install

For detailed build instructions, see INSTALL.md.

Known Issues

None known at release time. Please report any issues at:
https://github.com/chromatic/whippet-experimental-blockchain/issues

Release Information

Release Date: July 18, 2026
Version: 1.2.0
GitHub Tag: v1.2.0

For the latest information, visit:

1.1.0 Universal Asset Protocol / On-Chain Tokens

Choose a tag to compare

@chromatic chromatic released this 09 Feb 15:57

Whippet Core version 1.1.0 is now available from:

https://github.com/chromatic/whippet-experimental-blockchain/releases/tag/v1.1.0/

This is a major version release introducing consensus changes including new script opcodes for the Universal Asset Protocol (UAP). All nodes must upgrade to 1.1.0 to remain on the main chain.

Please report bugs using the issue tracker at GitHub:

https://github.com/chromatic/whippet-experimental-blockchain/r

Compatibility

Whippet Core is extensively tested on Ubuntu Server LTS, macOS and Windows.
Minimum OS compatibility can be found in the INSTALL guide.

Note: This release contains consensus changes and is not compatible with prior
versions. All nodes must upgrade to 1.1.0.

Notable changes

Consensus Changes

This release introduces consensus-level changes that require all nodes to upgrade.
Network compatibility and security depend on prompt adoption of this release.

Universal Asset Protocol (UAP) - Token Minting and Introspection

Three new script opcodes have been added to support the Universal Asset Protocol,
enabling token creation, transfer, and verification within script execution:

OP_MINT (0xb5) - Token Minting Opcode

OP_MINT enables the creation of new tokens on the blockchain. Scripts using OP_MINT
follow the pattern: [multiplier] [salt] OP_MINT

Features:

  • Tokens are identified by a unique salt (≥16 bytes)
  • Token supply is determined by a multiplier value (e.g., 1000 tokens per WHIP)
  • Entry fee requirement: input value ≥ 1000 COIN satoshis prevents spam
  • Full validation in both mempool (policy) and block (consensus) rules

Policy Rules:

  • Salt must be ≥16 bytes
  • Entry fee must be ≥1000 COIN satoshis
  • Script must be exactly [data] [data] OP_MINT format

Example:

Script: 1000 "unique_salt_16bytes_or_more" OP_MINT
Result: Creates a token with 1000 tokens per WHIP

OP_INSPECT (0xb7) - Output Introspection Opcode

OP_INSPECT allows scripts to examine transaction output properties at execution time.
Pattern: [field_selector] OP_INSPECT pushes the selected field value onto the stack.

Supported Field Selectors:

  • 0: version (protocol version)
  • 1: input_index (current input index)
  • 12: output_value (current output's nValue in satoshis)
  • Other field selectors for extended introspection

Use Cases:

  • Token value verification in covenants
  • Cross-output validation
  • Token conservation checking

Example:

Script: 0 OP_INSPECT 1 EQUAL
Result: Pushes protocol version and verifies it equals 1

OP_INSPECT_SELF (0xb6) - Script Introspection Opcode

OP_INSPECT_SELF allows scripts to examine their own scriptPubKey at execution time.
Pattern: OP_INSPECT_SELF pushes the entire scriptPubKey onto the stack.

Use Cases:

  • Script self-reference and validation
  • Covenant enforcement
  • Template verification

Example:

Script: OP_INSPECT_SELF OP_INSPECT_SELF EQUAL
Result: Verifies the script appears twice (both outputs have same script)

Protocol Version Update

  • Protocol version updated to 70016
  • Nodes running versions prior to 70016 will not be compatible with this network
  • Peers running older protocol versions will be disconnected

Network Activation

The consensus changes in this release activate immediately upon block validation.
All nodes must upgrade before processing blocks containing these new opcodes.

Upgrade Deadline: Immediate - upgrade before first block with new opcodes

New Features

UAP Transaction Type Recognition

New transaction script types have been added to the script type classifier:

  • TX_OP_MINT: Scripts matching the OP_MINT pattern are now recognized and validated
  • TX_OP_TRANSFER: Simple UAP covenant transfers (pubkey + OP_CHECKSIG) are recognized

These types enable specialized handling in the relay policy and transaction validation.

Testing and Quality Assurance

Comprehensive Python Test Suite

Three new Python integration tests provide end-to-end testing of UAP features:

  1. uap_transactions.py - Tests token mechanics

    • Token conservation validation
    • Minting and spending flow
    • Transaction validity in mempool and blocks
  2. uap_mint_transfer_spend.py - Tests individual features

    • OP_MINT validation and constraints
    • OP_INSPECT and OP_INSPECT_SELF opcodes
    • UAP transfer covenants
    • Multi-level transaction chains
    • End-to-end token lifecycle
  3. uap_integration.py - Integration tests (extended suite)

    • Complex multi-party scenarios
    • Covenant preservation across transactions
    • Large-scale token operations

All tests verify:

  • Correct token supply and conservation
  • Proper entry fee enforcement
  • Salt validation requirements
  • Script execution semantics
  • Covenant enforcement

Building and Installation

Standard build process applies:

./autogen.sh
./configure
make
make check
sudo make install

For detailed build instructions, see INSTALL.md.

Known Issues

None known at release time.

Upgrading from Prior Versions

Important: This release contains consensus changes. Follow these steps:

  1. Backup your wallet before upgrading:

    whippet-cli dumpwallet backup.txt
  2. Stop your Whippet daemon:

    whippet-cli stop
  3. Upgrade Whippet Core using your package manager or by building from source

  4. Start the daemon (blockchain will be validated during startup):

    whippetd
  5. Verify the upgrade:

    whippet-cli getinfo
    # Should show version 1.1.0 and protocol version 70016

Block validation may take several minutes as the daemon re-validates the blockchain
with the new consensus rules. This is normal and expected.

Acknowledgments

The UAP implementation and testing were developed to provide advanced script capabilities
and token support for the Whippet blockchain. This may not work, but let's try it!

Miscellaneous

  • Documentation: See doc/uap-minting-guide.md for comprehensive
    guide to using OP_MINT and UAP features
  • Source code review: Use git log --oneline v1.0.0..v1.1.0 to review changes
  • Previous releases: Release history

Commit Hashes

Key commits in this release:

  • 04dc76eee - script: add OP_INSPECT_SELF opcode and tests
  • 506e0d205 - script: add OP_INSPECT opcode and tests
  • 1891aea14 - script: add OP_MINT opcode and policy/standard checks
  • 0c1a8b79f - test: register UAP Python tests in RPC test suite

Release Information

Release Date: February 8, 2026
Version: 1.1.0
Protocol Version: 70016
GitHub Tag: v1.1.0

1.0.0 experimental

Choose a tag to compare

@chromatic chromatic released this 12 Jan 17:51

DO NOT USE THIS FOR REAL WORK

but if you want to help test, mine, stress test, this is a great release

See Whippet Faucet to get some coins to test. Download this code, get an address, get some coins.

See the mining Python code to mine blocks.