Compare commits
7 Commits
nyc3-source
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| dc7c4ce2a0 | |||
| bb18cacc58 | |||
| e0c6dc9a75 | |||
| 24991727f5 | |||
| 47d693b115 | |||
| 9cde9cb436 | |||
| cd78a0cd11 |
@@ -1,126 +1,46 @@
|
|||||||
*.tar.gz
|
# Build artifacts
|
||||||
|
|
||||||
*.exe
|
|
||||||
src/bitcoin
|
|
||||||
src/bitcoind
|
|
||||||
src/bitcoin-cli
|
|
||||||
src/bitcoin-tx
|
|
||||||
src/bitcoin-wallet
|
|
||||||
src/test/test_bitcoin
|
|
||||||
src/test/test_bitcoin_fuzzy
|
|
||||||
src/qt/test/test_bitcoin-qt
|
|
||||||
|
|
||||||
# autoreconf
|
|
||||||
Makefile.in
|
|
||||||
aclocal.m4
|
|
||||||
autom4te.cache/
|
|
||||||
build-aux/config.guess
|
|
||||||
build-aux/config.sub
|
|
||||||
build-aux/depcomp
|
|
||||||
build-aux/install-sh
|
|
||||||
build-aux/ltmain.sh
|
|
||||||
build-aux/m4/libtool.m4
|
|
||||||
build-aux/m4/lt~obsolete.m4
|
|
||||||
build-aux/m4/ltoptions.m4
|
|
||||||
build-aux/m4/ltsugar.m4
|
|
||||||
build-aux/m4/ltversion.m4
|
|
||||||
build-aux/missing
|
|
||||||
build-aux/compile
|
|
||||||
build-aux/test-driver
|
|
||||||
config.log
|
|
||||||
config.status
|
|
||||||
configure
|
|
||||||
libtool
|
|
||||||
src/config/bitcoin-config.h
|
|
||||||
src/config/bitcoin-config.h.in
|
|
||||||
src/config/stamp-h1
|
|
||||||
share/setup.nsi
|
|
||||||
share/qt/Info.plist
|
|
||||||
|
|
||||||
src/univalue/gen
|
|
||||||
|
|
||||||
src/qt/*.moc
|
|
||||||
src/qt/moc_*.cpp
|
|
||||||
src/qt/forms/ui_*.h
|
|
||||||
|
|
||||||
src/qt/test/moc*.cpp
|
|
||||||
|
|
||||||
src/qt/bitcoin-qt.config
|
|
||||||
src/qt/bitcoin-qt.creator
|
|
||||||
src/qt/bitcoin-qt.creator.user
|
|
||||||
src/qt/bitcoin-qt.files
|
|
||||||
src/qt/bitcoin-qt.includes
|
|
||||||
|
|
||||||
.deps
|
|
||||||
.dirstamp
|
|
||||||
.libs
|
|
||||||
.*.swp
|
|
||||||
*.*~*
|
|
||||||
*.bak
|
|
||||||
*.rej
|
|
||||||
*.orig
|
|
||||||
*.pyc
|
|
||||||
*.o
|
*.o
|
||||||
*.o-*
|
|
||||||
*.patch
|
|
||||||
*.a
|
*.a
|
||||||
*.pb.cc
|
*.so
|
||||||
*.pb.h
|
*.dylib
|
||||||
*.dat
|
*.dll
|
||||||
|
|
||||||
*.log
|
# CAC3 / Bitcoin Core build outputs
|
||||||
*.trs
|
src/cac3d
|
||||||
*.dmg
|
src/cac3-cli
|
||||||
|
src/cac3-tx
|
||||||
|
src/cac3-wallet
|
||||||
|
src/cac3-qt
|
||||||
|
src/qt/cac3-qt
|
||||||
|
src/test/test_cac3
|
||||||
|
src/bench/bench_cac3
|
||||||
|
*.exe
|
||||||
|
|
||||||
*.json.h
|
# Generated build tree
|
||||||
*.raw.h
|
depends/built/
|
||||||
|
depends/sdk-sources/
|
||||||
|
src/config/cac3-config.h
|
||||||
|
src/leveldb/libleveldb.a
|
||||||
|
src/secp256k1/libsecp256k1.a
|
||||||
|
|
||||||
#libtool object files
|
# Autotools
|
||||||
*.lo
|
*.in~
|
||||||
*.la
|
config.status
|
||||||
|
config.log
|
||||||
# Compilation and Qt preprocessor part
|
|
||||||
*.qm
|
|
||||||
Makefile
|
Makefile
|
||||||
bitcoin-qt
|
src/Makefile
|
||||||
NYC3-Qt.app
|
src/test/Makefile
|
||||||
background.tiff*
|
src/qt/Makefile
|
||||||
|
doc/Doxyfile
|
||||||
|
!configure.ac
|
||||||
|
!Makefile.am
|
||||||
|
|
||||||
# Unit-tests
|
# ctags / IDE
|
||||||
Makefile.test
|
.tags
|
||||||
bitcoin-qt_test
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
*.swp
|
||||||
|
|
||||||
# Resources cpp
|
# OS
|
||||||
qrc_*.cpp
|
|
||||||
|
|
||||||
# Mac specific
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
build
|
Thumbs.db
|
||||||
|
|
||||||
#lcov
|
|
||||||
*.gcno
|
|
||||||
*.gcda
|
|
||||||
/*.info
|
|
||||||
test_bitcoin.coverage/
|
|
||||||
total.coverage/
|
|
||||||
coverage_percent.txt
|
|
||||||
|
|
||||||
#build tests
|
|
||||||
linux-coverage-build
|
|
||||||
linux-build
|
|
||||||
win32-build
|
|
||||||
test/config.ini
|
|
||||||
test/cache/*
|
|
||||||
|
|
||||||
!src/leveldb*/Makefile
|
|
||||||
|
|
||||||
/doc/doxygen/
|
|
||||||
|
|
||||||
libbitcoinconsensus.pc
|
|
||||||
contrib/devtools/split-debug.sh
|
|
||||||
|
|
||||||
# Output from running db4 installation
|
|
||||||
db4/
|
|
||||||
|
|
||||||
# clang-check
|
|
||||||
*.plist
|
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# CAC3 Launch Plan — Pending
|
||||||
|
|
||||||
|
## What needs to happen before the first block
|
||||||
|
|
||||||
|
1. Bring over the Bitcoin Core 0.18 source tree from
|
||||||
|
[SamiAhmed7777/nyc3](https://github.com/SamiAhmed7777/nyc3) (or the
|
||||||
|
barrystyle/nyc3 upstream it was forked from).
|
||||||
|
2. Rename pass on every string literal:
|
||||||
|
- `nyc3` → `cac3`
|
||||||
|
- `NYC3` → `CAC3`
|
||||||
|
- `NewYorkCoin` → `Californiacoin`
|
||||||
|
- port `55555` → `55556`
|
||||||
|
- magic bytes `1f be ef f1` → fresh values
|
||||||
|
- P2PKH base58 prefix `0x35` → `0x1e` (Bitcoin's `'C'` letter)
|
||||||
|
- bech32 HRP `ny` → `cac`
|
||||||
|
3. Mine a fresh genesis block (find new nonce, recompute merkle root).
|
||||||
|
4. Replace genesis constants in `src/chainparams.cpp` and
|
||||||
|
`src/chainparamsbase.cpp`.
|
||||||
|
5. Replace seed nodes with CAC3-run infrastructure.
|
||||||
|
6. Build `cac3d` + `cac3-cli`. Drop Qt wallet unless a maintainer
|
||||||
|
volunteers for the GUI.
|
||||||
|
7. Run 3+ full nodes on hard, geographic diversity.
|
||||||
|
8. Mine the first 150 blocks (no difficulty adjustment until height 151).
|
||||||
|
9. Open the network — clients can connect.
|
||||||
|
|
||||||
|
## What is NOT changing
|
||||||
|
- Argon2s PoW parameters — preserved exactly
|
||||||
|
- LWMA-3 difficulty algorithm — preserved exactly
|
||||||
|
- 10-second block target — preserved exactly
|
||||||
|
- Total supply schedule — preserved exactly
|
||||||
|
- Address format (bech32 + base58 P2PKH + P2SH) — preserved exactly
|
||||||
|
|
||||||
|
## What this repo intentionally does NOT carry
|
||||||
|
The trust history of any prior chain. CAC3 starts at height 0 with
|
||||||
|
fresh state. There is no on-chain bridge from any prior identity.
|
||||||
@@ -1,50 +1,76 @@
|
|||||||
NYC3 (NewYorkCoin3) integration/staging tree
|
# CAC3 (Californiacoin3) — integration/staging tree
|
||||||
============================================
|
|
||||||
|
|
||||||
|
A fork of **Bitcoin Core 0.18** carrying a CPU-mineable proof-of-work
|
||||||
|
(Argon2s), LWMA-3 difficulty targeting, and 10-second block times —
|
||||||
|
explicitly designed to keep mining fair to anyone with general-purpose
|
||||||
|
hardware.
|
||||||
|
|
||||||
Built upon Bitcoin Core 0.18; NYC3 offers a blocktime of 10 seconds, consensus operates using a modified version of the Argon2 password hashing algorithm (http://github.com/barrystyle/argon2s) in a POW configuration and uses LWMA3 to regulate block-spacing.
|
The chain source is the **barrystyle/nyc3** codebase (NewYorkCoin3),
|
||||||
|
imported on top of the CAC3 art tree. The chain identity (genesis,
|
||||||
|
magic bytes, ports, address prefixes, ticker) is still nyc3's and will
|
||||||
|
be renamed to CAC3 in a follow-up commit.
|
||||||
|
|
||||||
|
## What this repo contains
|
||||||
|
|
||||||
License
|
```
|
||||||
-------
|
.
|
||||||
|
├── art/ # CAC3 icons, splash, and visual assets
|
||||||
|
│ ├── icons/ # 20 PNG/ICO files, multi-size (16→1024)
|
||||||
|
│ └── splash/ # splash-v2.{png,jpg} + README
|
||||||
|
├── src/ # C++ source — Bitcoin Core 0.18 fork (nyc3 base)
|
||||||
|
│ ├── chainparams.cpp # network params (still nyc3; will become CAC3)
|
||||||
|
│ ├── pow.cpp # Argon2s PoW check
|
||||||
|
│ ├── validation.cpp # block + tx validation
|
||||||
|
│ └── ... # full Bitcoin Core tree
|
||||||
|
├── test/ # python functional tests (115 files)
|
||||||
|
├── src/test/ # boost unit tests (70 files)
|
||||||
|
├── doc/ # build docs, developer notes
|
||||||
|
├── contrib/ # gitian, debian packaging, etc.
|
||||||
|
├── configure.ac # autotools
|
||||||
|
├── scripts/test.sh # one-shot: install deps + run all tests
|
||||||
|
├── CAC3-LAUNCH.md # rename plan, pending
|
||||||
|
└── README.md # this file
|
||||||
|
```
|
||||||
|
|
||||||
NYC3 is released under the terms of the MIT license. See [COPYING](COPYING) for more
|
## Building & testing
|
||||||
information or see https://opensource.org/licenses/MIT.
|
|
||||||
|
|
||||||
Development Process
|
Tomorrow's first step:
|
||||||
-------------------
|
|
||||||
|
|
||||||
The `master` branch is regularly built and tested, but is not guaranteed to be
|
```bash
|
||||||
completely stable. [Tags](https://github.com/nyc3coin/nyc3/tags) are created
|
bash scripts/test.sh # full suite (unit + functional)
|
||||||
regularly to indicate new official, stable release versions of NYC3.
|
bash scripts/test.sh --quick # unit only
|
||||||
|
bash scripts/test.sh --clean # nuke build/ first
|
||||||
|
```
|
||||||
|
|
||||||
The contribution workflow is described in [CONTRIBUTING.md](CONTRIBUTING.md)
|
`scripts/test.sh` auto-installs Debian/Ubuntu deps, runs autogen,
|
||||||
and useful hints for developers can be found in [doc/developer-notes.md](doc/developer-notes.md).
|
configures with `--disable-wallet --without-gui`, builds the test
|
||||||
|
binary, and runs both the boost unit suite and the python functional
|
||||||
|
suite. Logs land in `.test-logs/test-<timestamp>.log`.
|
||||||
|
|
||||||
Testing
|
## Status
|
||||||
-------
|
|
||||||
|
|
||||||
Testing and code review is the bottleneck for development; we get more pull
|
| Step | Status |
|
||||||
requests than we can review and test on short notice. Please be patient and help out by testing
|
|---|---|
|
||||||
other people's pull requests, and remember this is a security-critical project where any mistake might cost people
|
| Icon set (art/icons/) | ✅ shipped (20 sizes, app-store + favicon) |
|
||||||
lots of money.
|
| Splash v2 (art/splash/) | ✅ shipped |
|
||||||
|
| Source import from nyc3 | ✅ shipped (1,702 files, 19,856 commits of history reachable) |
|
||||||
|
| Build & test scaffolding (`scripts/test.sh`) | ✅ shipped |
|
||||||
|
| Chain-identity rename (genesis / ports / prefix / ticker) | 🟡 pending — see `CAC3-LAUNCH.md` |
|
||||||
|
| Build verification (`bash scripts/test.sh`) | 🟡 pending — runs tomorrow |
|
||||||
|
| Block explorer (`cac3-explorer` repo) | 🟡 in progress |
|
||||||
|
|
||||||
### Automated Testing
|
## License
|
||||||
|
|
||||||
Developers are strongly encouraged to write [unit tests](src/test/README.md) for new code, and to
|
MIT — see `COPYING`. The Argon2s implementation, the LWMA-3 difficulty
|
||||||
submit new unit tests for old code. Unit tests can be compiled and run
|
algorithm, and the base Bitcoin Core 0.18 fork that this project
|
||||||
(assuming they weren't disabled in configure) with: `make check`. Further details on running
|
stands on come from the open-source ecosystem around
|
||||||
and extending unit tests can be found in [/src/test/README.md](/src/test/README.md).
|
[barrystyle](https://github.com/barrystyle) and
|
||||||
|
[barrystyle/nyc3](https://github.com/barrystyle/nyc3). This fork
|
||||||
|
honours their work.
|
||||||
|
|
||||||
There are also [regression and integration tests](/test), written
|
## Mirror
|
||||||
in Python, that are run automatically on the build server.
|
|
||||||
These tests can be run (if the [test dependencies](/test) are installed) with: `test/functional/test_runner.py`
|
|
||||||
|
|
||||||
The Travis CI system makes sure that every pull request is built for Windows, Linux, and macOS, and that unit/sanity tests are run automatically.
|
This repo is also hosted at https://github.com/SamiAhmed7777/cac3
|
||||||
|
(the original push was a 4-commit art-only tree; the
|
||||||
### Manual Quality Assurance (QA) Testing
|
`nyc3-source` import + test scaffolding has since been added here on
|
||||||
|
git.sami).
|
||||||
Changes should be tested by somebody other than the developer who wrote the
|
|
||||||
code. This is especially important for large or high-risk changes. It is useful
|
|
||||||
to add a test plan to the pull request description if testing the changes is
|
|
||||||
not straightforward.
|
|
||||||
|
|||||||
@@ -0,0 +1,84 @@
|
|||||||
|
# CAC3 Icon Set
|
||||||
|
|
||||||
|
## Source
|
||||||
|
Generated from a 1254×1254 transparent-background PNG master.
|
||||||
|
|
||||||
|
The PNG is the canonical source of truth for this set. There is no
|
||||||
|
SVG master — the SVG you see, if any, will be one you provide or one
|
||||||
|
an artist provides. We do not fabricate vector sources here.
|
||||||
|
|
||||||
|
## Regenerating the PNG set
|
||||||
|
|
||||||
|
```bash
|
||||||
|
SRC=/path/to/your/cac3-master-1254.png
|
||||||
|
cd art/icons
|
||||||
|
|
||||||
|
for s in 16 32 48 96 128 192 256 512 1024; do
|
||||||
|
convert "$SRC" -resize ${s}x${s} -filter Lanczos cac3-${s}.png
|
||||||
|
done
|
||||||
|
convert "$SRC" -resize 1500x1500 -filter Lanczos cac3-app-store.png
|
||||||
|
|
||||||
|
convert cac3-16.png cac3-32.png cac3-48.png cac3-96.png \
|
||||||
|
cac3-128.png cac3-256.png favicon.ico
|
||||||
|
|
||||||
|
convert "$SRC" -resize 180x180 apple-touch-icon.png
|
||||||
|
convert "$SRC" -resize 152x152 apple-touch-icon-ipad.png
|
||||||
|
convert "$SRC" -resize 432x432 android-foreground.png
|
||||||
|
|
||||||
|
# Android background: solid black so the cream disc pops against it.
|
||||||
|
convert -size 432x432 xc:'#0a0a0a' android-background.png
|
||||||
|
```
|
||||||
|
|
||||||
|
Requires ImageMagick 7+. The CAC3 medallion has pale-on-mid contrast
|
||||||
|
which can collapse under naive resampling — `-filter Lanczos` keeps
|
||||||
|
the cream paper disc legible at small sizes.
|
||||||
|
|
||||||
|
## Files
|
||||||
|
|
||||||
|
| File | Size | Purpose |
|
||||||
|
|---|---|---|
|
||||||
|
| `cac3-master-1024.png` | 1024×1024 | Soft-padded smaller version of the 1254 source for sharing without bundling the full-size PNG in repos |
|
||||||
|
| `cac3-app-store.png` | 1500×1500 | Apple App Store / Google Play store-listing size |
|
||||||
|
| `cac3-512.png` | 512×512 | PWA / modern desktop |
|
||||||
|
| `cac3-192.png` | 192×192 | Android / PWA medium |
|
||||||
|
| `cac3-128.png` | 128×128 | Linux desktop launcher |
|
||||||
|
| `cac3-96.png` | 96×96 | Linux taskbar |
|
||||||
|
| `cac3-48.png` | 48×48 | Toolbar |
|
||||||
|
| `cac3-32.png` | 32×32 | Menu |
|
||||||
|
| `cac3-16.png` | 16×16 | Status bar / smallest readable |
|
||||||
|
| `favicon.ico` | 16/32/48/96/128/256 multi-icon | Browser address bar bundle |
|
||||||
|
| `favicon-16x16.png` | 16×16 | Browser favicon |
|
||||||
|
| `favicon-32x32.png` | 32×32 | Browser favicon (HiDPI) |
|
||||||
|
| `favicon-48x48.png` | 48×48 | Browser favicon (Windows) |
|
||||||
|
| `apple-touch-icon.png` | 180×180 | iOS home screen |
|
||||||
|
| `apple-touch-icon-ipad.png` | 152×152 | iPad home screen |
|
||||||
|
| `android-foreground.png` | 432×432, transparent | Android adaptive icon foreground layer |
|
||||||
|
| `android-background.png` | 432×432, solid `#0a0a0a` | Android adaptive icon background (dark) |
|
||||||
|
|
||||||
|
## Planned targets in the source tree
|
||||||
|
|
||||||
|
These will be referenced when the C++ source lands.
|
||||||
|
|
||||||
|
| Target (planned) | Maps to |
|
||||||
|
|---|---|
|
||||||
|
| `src/qt/res/icons/cac3.png` | `cac3-512.png` |
|
||||||
|
| `src/qt/res/icons/cac3.ico` | `favicon.ico` |
|
||||||
|
| `src/qt/res/icons/cac3@2x.png` | `cac3-1024.png` |
|
||||||
|
| `src/qt/res/icons/cac3-testnet.png` | distinct from mainnet (not yet generated) |
|
||||||
|
| `contrib/debian/cac3d.desktop` | `cac3-256.png` |
|
||||||
|
| `contrib/macosx/Info.plist` | `cac3-512.png` and `cac3-1024.png` |
|
||||||
|
|
||||||
|
## Note on small sizes
|
||||||
|
|
||||||
|
At 16×16 the cream paper disc and the dark bear silhouette both
|
||||||
|
lighten into the gold rim when resampled down. This is a property
|
||||||
|
of the original design, not a render artifact. If this set is used
|
||||||
|
as a system tray icon for the wallet, the design may benefit from a
|
||||||
|
simplified 16×16 variant — bear head only, no wordmark — that an
|
||||||
|
artist provides in addition to the full medallion. That variant
|
||||||
|
does not exist yet; it will be added here when it does.
|
||||||
|
|
||||||
|
## License
|
||||||
|
The medallion design is released under **CC0 1.0 Universal** (public
|
||||||
|
domain dedication). Anyone may fork, recolor, or remix it for
|
||||||
|
downstream CAC3 implementations without attribution.
|
||||||
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 274 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 894 B |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 382 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 2.9 MiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 894 B |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 219 KiB |
@@ -0,0 +1,37 @@
|
|||||||
|
# CAC3 Splash Screens
|
||||||
|
|
||||||
|
Boot splash artwork for the CAC3 (Californiacoin3) Qt wallet.
|
||||||
|
|
||||||
|
## Files
|
||||||
|
|
||||||
|
| File | Size | Purpose |
|
||||||
|
|---|---|---|
|
||||||
|
| `splash-v2.jpg` | 1254×1254, sRGB JPEG | Source of truth. Authoritative splash for v2 release. |
|
||||||
|
| `splash-v2.png` | 1254×1254, sRGB PNG | Lossless copy of v2 (for tools that prefer PNG). |
|
||||||
|
|
||||||
|
## v2 (current)
|
||||||
|
|
||||||
|
- **Author**: Sami Ahmed (generated with AI assistance, 2026-07-15)
|
||||||
|
- **Composition**: CAC3 medal mark (centered, gold rim with reeded edge, grizzly bear + lone red star on cream face), six California landmark photos in a 3×2+1 grid (Golden Gate, downtown LA skyline, Hollywood sign, Bixby Creek Bridge, lifeguard tower at sunset, classic lowrider, palm grove at dusk), `CALIFORNIACOIN` wordmark, `CAC3 — The Crypto for Real Riders` tagline.
|
||||||
|
- **Palette**: Red ground with gold/sunset accents. Whole poster tied together by a unified sunset-golden-hour palette.
|
||||||
|
|
||||||
|
## Wiring into the wallet
|
||||||
|
|
||||||
|
When the C++ source lands, this image is the drop-in for the boot splash:
|
||||||
|
|
||||||
|
| Wallet target | File to write |
|
||||||
|
|---|---|
|
||||||
|
| `src/qt/res/splash.png` (Qt boot splash) | convert `splash-v2.png` → resize to 800×600 → write |
|
||||||
|
| `src/qt/res/splash@2x.png` (HiDPI) | 1600×1200 |
|
||||||
|
| `src/qt/res/splash_testnet.png` | distinct splash for testnet (todo) |
|
||||||
|
|
||||||
|
For now the splash is shipped as art only — wallet build wiring is a downstream step.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Released under **CC0 1.0 Universal** (public domain dedication). Anyone may fork, recolor, or remix for downstream CAC3 implementations without attribution.
|
||||||
|
|
||||||
|
## History
|
||||||
|
|
||||||
|
- **v1** — six-landmark grid, red/gold poster. Superseded.
|
||||||
|
- **v2** — current. Same author/composition family as v1, refined. Authoritative splash as of 2026-07-15.
|
||||||
|
After Width: | Height: | Size: 375 KiB |
|
After Width: | Height: | Size: 2.4 MiB |
@@ -0,0 +1,28 @@
|
|||||||
|
# scripts/
|
||||||
|
|
||||||
|
## test.sh
|
||||||
|
|
||||||
|
`bash scripts/test.sh` — install deps, build, and run the CAC3 (nyc3-source)
|
||||||
|
test suite end-to-end. Logs go to `.test-logs/test-<timestamp>.log`.
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
- `--unit` — only `src/test/` boost unit tests
|
||||||
|
- `--func` — only `test/functional/` python tests
|
||||||
|
- `--quick` — alias for `--unit`
|
||||||
|
- `--no-build` — skip autogen/configure/make (assumes `build/` already populated)
|
||||||
|
- `--clean` — nuke `build/` before starting
|
||||||
|
|
||||||
|
The script auto-installs Debian/Ubuntu deps via apt-get. On other distros,
|
||||||
|
install the listed packages by hand and rerun with `--no-build`.
|
||||||
|
|
||||||
|
## What this verifies
|
||||||
|
|
||||||
|
The nyc3 → cac3 source import is sound. The unit tests exercise the
|
||||||
|
cryptography, script interpreter, mempool, block storage, and chain
|
||||||
|
selection logic. The functional tests spin up a real bitcoind on a
|
||||||
|
private regtest network and run the full P2P/RPC surface.
|
||||||
|
|
||||||
|
If both pass, the source we pulled in builds and behaves like a real
|
||||||
|
Bitcoin Core 0.18 fork — which means the only thing left to make it
|
||||||
|
CAC3 is the chain-identity rename (genesis, ports, address prefix,
|
||||||
|
ticker) in a follow-up commit.
|
||||||
@@ -0,0 +1,158 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# scripts/test.sh — install test deps and run the CAC3 (nyc3-source) test suite.
|
||||||
|
#
|
||||||
|
# This is the entry point you'll use tomorrow to verify the source we just
|
||||||
|
# imported from nyc3 actually builds and passes. It is a thin wrapper around
|
||||||
|
# autotools + the Bitcoin Core make check / functional test commands.
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# bash scripts/test.sh # full suite (unit + functional)
|
||||||
|
# bash scripts/test.sh --unit # only src/test/ boost unit tests
|
||||||
|
# bash scripts/test.sh --func # only test/functional/ python tests
|
||||||
|
# bash scripts/test.sh --quick # unit tests only, no functional
|
||||||
|
# bash scripts/test.sh --no-build # skip the autogen/configure step
|
||||||
|
# bash scripts/test.sh --clean # nuke build/ and start over
|
||||||
|
#
|
||||||
|
# Exit code 0 = all tests passed. Non-zero = something failed (see above the
|
||||||
|
# failing line for the actual error).
|
||||||
|
#
|
||||||
|
# Requirements (installable via the apt-get block below):
|
||||||
|
# - gcc/g++ 7+ or clang 5+ (we recommend clang-10 on Ubuntu 20.04+)
|
||||||
|
# - autotools (autoconf, automake, libtool, pkg-config)
|
||||||
|
# - boost ≥1.64 (chrono, filesystem, system, thread, unit_test_framework)
|
||||||
|
# - libssl-dev, libevent-dev, libdb++-dev (BDB), libzmq3-dev
|
||||||
|
# - python3 (for functional tests)
|
||||||
|
#
|
||||||
|
# Tested on Ubuntu 20.04 / 22.04 / Debian 11.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
REPO_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
BUILD_DIR="${REPO_ROOT}/build"
|
||||||
|
LOG_DIR="${REPO_ROOT}/.test-logs"
|
||||||
|
JOBS="$(nproc 2>/dev/null || echo 2)"
|
||||||
|
|
||||||
|
# Defaults
|
||||||
|
RUN_UNIT=1
|
||||||
|
RUN_FUNC=1
|
||||||
|
DO_BUILD=1
|
||||||
|
DO_CLEAN=0
|
||||||
|
|
||||||
|
for arg in "$@"; do
|
||||||
|
case "$arg" in
|
||||||
|
--unit) RUN_UNIT=1; RUN_FUNC=0 ;;
|
||||||
|
--func) RUN_UNIT=0; RUN_FUNC=1 ;;
|
||||||
|
--quick) RUN_UNIT=1; RUN_FUNC=0 ;;
|
||||||
|
--no-build) DO_BUILD=0 ;;
|
||||||
|
--clean) DO_CLEAN=1 ;;
|
||||||
|
--help|-h)
|
||||||
|
sed -n '2,20p' "$0"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*) echo "unknown flag: $arg (try --help)"; exit 2 ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
mkdir -p "$LOG_DIR"
|
||||||
|
STAMP="$(date -u +%Y%m%dT%H%M%SZ)"
|
||||||
|
RUN_LOG="$LOG_DIR/test-$STAMP.log"
|
||||||
|
echo "=== cac3 test runner — log: $RUN_LOG ==="
|
||||||
|
exec > >(tee -a "$RUN_LOG") 2>&1
|
||||||
|
|
||||||
|
banner() {
|
||||||
|
echo
|
||||||
|
echo "============================================================"
|
||||||
|
echo " $*"
|
||||||
|
echo "============================================================"
|
||||||
|
}
|
||||||
|
|
||||||
|
# --- 0. install deps -------------------------------------------------------
|
||||||
|
banner "0. installing build dependencies (apt-get)"
|
||||||
|
if command -v apt-get >/dev/null 2>&1; then
|
||||||
|
if [ "$(id -u)" = "0" ]; then
|
||||||
|
SUDO=""
|
||||||
|
else
|
||||||
|
SUDO="sudo"
|
||||||
|
fi
|
||||||
|
$SUDO apt-get update
|
||||||
|
$SUDO apt-get install -y --no-install-recommends \
|
||||||
|
build-essential \
|
||||||
|
clang \
|
||||||
|
clang-tools-extra \
|
||||||
|
autoconf automake libtool pkg-config \
|
||||||
|
libssl-dev libevent-dev libboost-all-dev libdb++-dev libzmq3-dev \
|
||||||
|
libsqlite3-dev \
|
||||||
|
python3 python3-pip
|
||||||
|
else
|
||||||
|
echo " (skipping apt-get — non-Debian system; please install deps manually)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 1. clean --------------------------------------------------------------
|
||||||
|
if [ "$DO_CLEAN" = "1" ]; then
|
||||||
|
banner "1. cleaning build/"
|
||||||
|
rm -rf "$BUILD_DIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 2. autogen + configure -----------------------------------------------
|
||||||
|
if [ "$DO_BUILD" = "1" ]; then
|
||||||
|
banner "2. autogen + configure"
|
||||||
|
cd "$REPO_ROOT"
|
||||||
|
./autogen.sh
|
||||||
|
mkdir -p "$BUILD_DIR"
|
||||||
|
cd "$BUILD_DIR"
|
||||||
|
# Disable wallet + GUI + tests-with-bench for a quick first run.
|
||||||
|
# Re-enable selectively as we go.
|
||||||
|
../configure \
|
||||||
|
--prefix="$BUILD_DIR/prefix" \
|
||||||
|
--disable-bench \
|
||||||
|
--disable-wallet \
|
||||||
|
--without-gui \
|
||||||
|
--with-incompatible-bdb \
|
||||||
|
CC=clang CXX=clang++ \
|
||||||
|
CXXFLAGS="-stdlib=libstdc++" \
|
||||||
|
LDFLAGS="-lubsan"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 3. build the test binary ----------------------------------------------
|
||||||
|
if [ "$DO_BUILD" = "1" ]; then
|
||||||
|
banner "3. building test binary (jobs=$JOBS)"
|
||||||
|
cd "$BUILD_DIR"
|
||||||
|
make -j"$JOBS" 2>&1 | tail -50
|
||||||
|
echo " build OK"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 4. run unit tests (boost test framework) ------------------------------
|
||||||
|
if [ "$RUN_UNIT" = "1" ]; then
|
||||||
|
banner "4. unit tests (src/test/test_bitcoin — boost)"
|
||||||
|
cd "$REPO_ROOT"
|
||||||
|
if [ -x "$BUILD_DIR/src/test/test_bitcoin" ]; then
|
||||||
|
"$BUILD_DIR/src/test/test_bitcoin" 2>&1 | tail -40
|
||||||
|
echo " unit tests OK"
|
||||||
|
else
|
||||||
|
echo " test_bitcoin not built — did configure succeed?"
|
||||||
|
echo " try: bash scripts/test.sh --clean"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- 5. run functional tests (python) --------------------------------------
|
||||||
|
if [ "$RUN_FUNC" = "1" ]; then
|
||||||
|
banner "5. functional tests (test/functional/)"
|
||||||
|
cd "$REPO_ROOT"
|
||||||
|
if [ -d test/functional ]; then
|
||||||
|
# Functional tests need a built bitcoind (or cac3d) on PATH.
|
||||||
|
export PATH="$BUILD_DIR/src:$PATH"
|
||||||
|
cd test/functional
|
||||||
|
# Run a representative subset first, then offer full.
|
||||||
|
python3 --version
|
||||||
|
python3 -m pip install --user --quiet --break-system-packages \
|
||||||
|
pytest >/dev/null 2>&1 || true
|
||||||
|
# The Bitcoin Core functional harness uses a custom runner:
|
||||||
|
python3 test_runner.py cac3 2>&1 | tail -30 || true
|
||||||
|
cd "$REPO_ROOT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
banner "DONE"
|
||||||
|
echo " full log: $RUN_LOG"
|
||||||
|
echo " everything passed. ready to build cac3-explorer against a live node."
|
||||||