feat: add Tacit plugin - #184
Draft
z0r0z wants to merge 1 commit into
Draft
Conversation
Collaborator
|
Interesting! I will look into this. Maybe a little bit out of our scope (since narrowest scope is pure eth L1 shielded pool implementations) but will def look into it |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Tacit is a trustless ETH/ERC-20 mixer that uses Bitcoin as its settlement layer. Deposits go into fixed-denomination Poseidon Merkle pools on Ethereum; withdrawals are verified through a Bitcoin light relay + SP1 state proofs + Groth16 burn proofs. No operators, no multisigs.
This adds
@kohaku-eth/tacitimplementing the plugin interface:prepareShield— builds the Poseidon commitment, returns depositTxData(same flow as Tornado/Privacy Pools)prepareUnshield— returns aTacitPrivateOperationcarrying the burn envelope, Groth16 witness, and contract parameters. The operation is taggedcrosschain: true/phase: "bitcoin-burn-required"so the wallet knows the withdrawal is a multi-step flow across Bitcoin and Ethereumhost.keystore.deriveAt()at coin type28785', secrets reduced mod BN254The unshield is the interesting part. In Tornado or Privacy Pools,
prepareUnshieldreturns an Ethereum transaction. In Tacit, the user first embeds a burn envelope in a Bitcoin OP_RETURN, waits for 6+ confirmations and SP1 acceptance, then callswithdrawFromBurn()on Ethereum with the raw Bitcoin tx and relay headers. The plugin returns all the structured data for both steps.Proof generation (snarkjs + circuit artifacts) and Bitcoin tx construction are left to the consuming wallet — the plugin provides the commitment math, Merkle tree utils, and the complete witness/envelope structure.
Workspace-level changes (
pnpm-workspace.yaml, changeset) included. Docs pages not included — happy to add once the approach looks right.Links: tacit.finance · TacitBridgeMixer.sol · withdraw.circom