* Consolidate GitHub CI actions, split out Monero
build now includes the specified Rust toolchain/components.
Added a test dependencies action which grabs Foundry and Monero.
Split the Monero v14 job into a matrixed job in its own workflow flow.
It's now only run when Monero has changes.
* Correct Monero unit/integration tests run timing
Additionally tests a feature-less Monero build.
Also removes a pointless Monero file, which already should have been
removed, causing this workflow to be triggered.
* Correct exclusion and paths
Updates to FROST should re-run the Monero tests to ensure it didn't
introduce API incompatibilities.
* Initial stab at Bulletproofs+
Does move around the existing Bulletproofs code, does still work as
expected.
* Make the Clsag RCTPrunable type work with BP and BP+
* Initial set of BP+ bug fixes
* Further bug fixes
* Remove RING_LEN as a constant
* Monero v16 TX support
Doesn't implement view tags, nor going back to v14, nor the updated BP
clawback logic.
* Support v14 and v16 at the same time
Introduces missing CLSAG checks. The only difference now should be the
additional rejection of torsioned points, which is relevant to
https://github.com/serai-dex/serai/issues/25. Considering this is only
currently used for FROST verification, this should be fine.
Closes https://github.com/serai-dex/serai/issues/19 by making it
irrelevant.
Increases priority of https://github.com/serai-dex/serai/issues/68, as
now it's used for the BP generators which are done at first-proof.
Also merges BP's stricter hash_to_point with the library's, since CLSAG
has the same bound.
* Initial attempt at Bulletproofs
I don't know why this doesn't work. The generators and hash_cache lines
up without issue. AFAICT, the inner product proof is valid as well, as
are all included formulas.
* Add yinvpow asserts
* Clean code
* Correct bad imports
* Fix the definition of TWO_N
Bulletproofs work now :D
* Tidy up a bit
* fmt + clippy
* Compile a variety of XMR dependencies with optimizations, even under dev
The Rust bulletproof implementation is 8% slower than C right now, under
release. This is acceptable, even if suboptimal. Under debug, they take
a quarter of a second to two seconds though, depending on the amount of
outputs, which justifies this move.
* Remove unnecessary deref in BPs
* Remove the Monero CMake and make
* Download the Monero daemon instead of building it
* Cache the Monero daemon
Prevents hammering the Monero servers, should reduce CI time.
* Correct YAML
* Add back sodium-dev
* Create an independent job for downloading the Monero daemon
Improves parallelism while decreasing the amount of work re-done if
build fails. Also increases modularity.
* Correct Monero job definition
* Correct skipping the Monero download on cache hit
* begin to setup ci
* attempt to fix build
* fix paths in build script
* fix
* satisfy clippy
* update fmt check to use nightly
* use nightly for build
* fmt
* fix fmt install
* update test script
* try to fix fmt
* merge w develop
* maybe fix build script
* install wasm toolchain
* install solc-select, use stable rust to build
* Correct clippy warnings
Currently intended to be done with:
cargo clippy --features "recommended merlin batch serialize experimental
ed25519 ristretto p256 secp256k1 multisig" -- -A clippy::type_complexity
-A dead_code
* Remove try-runtime
I tried to get this to work for an hour. I have no idea why it doesn't,
yet it doesn't.
* Rewrite workflow
Splits tasks into a more modular structure. Also uses
actions-rs/toolchain.
* Add a cache
* Immediately try building ETH/Monero while this is fixed
Adds solc-select use.
* Revert selective advance building of ETH/XMR
ETH builds now, so it hopefully should work now.
Also moves from on push to on push to develop.
* Install Monero runtime dependencies
Specify missing Rust toolchain setting.
* Correct multi-line commands
* Fix multi-line commands again
Cache Ethereum artifacts.
* Add Foundry
* Move Clippy under build
* Minimal rustup
Adds wasm Clippy. Puts Clippy before build.
* Use nightly clippy
* Remove old clippy call from under build
* Have the Monero build script support ARCH specification
Requirement for CI.
* Add WASM toolchain to tests
* Remove Ethereum cache which did not work as needed
* Remove extraneous quotes which broke builds on Arch
Co-authored-by: Luke Parker <lukeparker5132@gmail.com>
Currently intended to be done with:
cargo clippy --features "recommended merlin batch serialize experimental
ed25519 ristretto p256 secp256k1 multisig" -- -A clippy::type_complexity
-A dead_code
The two-generator limit wasn't required nor beneficial. This does
theoretically optimize FROST, yet not for any current constructions. A
follow up proof which would optimize current constructions has been
noted in #38.
Adds explicit no_std support to the core DLEq proof.
Closes#34.
While Serai only needs the simple DLEq which was already present under
monero, this migrates the implementation of the cross-group DLEq I
maintain into Serai. This was to have full access to the ecosystem of
libraries built under Serai while also ensuring support for it.
The cross_group curve, which is extremely experimental, is feature
flagged off. So is the built in serialization functionality, as this
should be possible to make nostd once const generics are full featured,
yet the implemented serialization adds the additional barrier of
std::io.
Increases usage of standardization while expanding dalek_ff_group.
Closes https://github.com/serai-dex/serai/issues/26 by moving
dfg::EdwardsPoint to only be for the prime subgroup.
Updates how change outputs are handled, with a far more logical
construction offering greater flexibility.
prepare_outputs can not longer error. SignaableTransaction::new will.
Modifies FROST behavior so group_key has the offset applied regardless
of if view was called. The unaltered secret_share and
verification_shares (as they have differing values depending on the
signing set) are no longer publicly accessible.