Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
66b86da
docs: plan Taproot Asset OOR integration
darioAnongba Jul 14, 2026
b4f8a67
oor: add Taproot Asset transfer metadata
darioAnongba Jul 14, 2026
870a16b
rpc: carry Taproot Asset OOR metadata
darioAnongba Jul 14, 2026
569719d
oor: persist prepared asset submit packages
darioAnongba Jul 14, 2026
d5beb8b
vtxo: persist Taproot Asset roots
darioAnongba Jul 14, 2026
a481d6b
oor: materialize Taproot Asset receives
darioAnongba Jul 14, 2026
dc4d87c
rpc: expose Taproot Asset OOR preparation
darioAnongba Jul 15, 2026
1460cea
tapassets: prepare OOR asset transitions
darioAnongba Jul 15, 2026
6d36c83
waved: enable Taproot Asset OOR adapter
darioAnongba Jul 15, 2026
6acedb9
docs: record Taproot Asset bootstrap gap
darioAnongba Jul 15, 2026
69eb0d6
tapassets: add direct asset onboarding workflow
darioAnongba Jul 15, 2026
363804d
waved: wire taproot asset onboarding
darioAnongba Jul 15, 2026
a47de62
wavecli: add Taproot Asset onboarding command
darioAnongba Jul 15, 2026
1bf2c9c
docs: complete asset onboarding plan
darioAnongba Jul 15, 2026
8301d16
docs: plan carrier-funded asset onboarding
darioAnongba Jul 21, 2026
03f09d9
tapassets: wallet fund onboarding carriers
darioAnongba Jul 21, 2026
aeffacf
docs: plan asset carrier input selection
darioAnongba Jul 21, 2026
21e9e9d
multi: reserve asset carrier inputs
darioAnongba Jul 21, 2026
c12cdfd
waved: export Taproot Asset runtime registration
darioAnongba Jul 21, 2026
ef84ed4
docs: plan durable Taproot Asset state
darioAnongba Jul 21, 2026
d0b598d
tapassets: persist asset state for mixed OOR transfers
darioAnongba Jul 21, 2026
532768f
docs: plan partial Taproot Asset OOR sends
darioAnongba Jul 21, 2026
5609ef2
tapassets: support partial asset OOR sends
darioAnongba Jul 28, 2026
54bae0b
build: pin merged tap-sdk output preview
darioAnongba Jul 29, 2026
597e49b
waved: use valid round ID for asset onboarding
darioAnongba Jul 29, 2026
d0f8e78
harness: build tapd image from local source
darioAnongba Jul 29, 2026
fac4969
tapassets: describe Bitcoin-only Ark outputs
darioAnongba Jul 29, 2026
1c4aff7
db: persist Taproot Asset receive aliases
darioAnongba Jul 29, 2026
d4a5299
multi: route composed Taproot Asset outputs
darioAnongba Jul 29, 2026
e123bfc
oor: accept externally confirmed ancestry roots
darioAnongba Jul 29, 2026
7a17784
build: pin Taproot Asset transition proof support
darioAnongba Jul 29, 2026
bf6b5b1
tapassets: bootstrap chained proof issuance
darioAnongba Jul 29, 2026
061d6d7
config: document Taproot Asset options
darioAnongba Jul 29, 2026
1ffc911
harness: probe tapd readiness through tap-sdk
darioAnongba Jul 31, 2026
bce6885
vtxo: exclude asset carrier sats from spendable balance
darioAnongba Jul 31, 2026
b5bdfb6
waved: keep asset VTXOs out of round-based flows
darioAnongba Jul 31, 2026
3503d23
build: pin merged tap-sdk main
darioAnongba Aug 3, 2026
4c891a5
tree: support per-node signing tweaks
darioAnongba Aug 3, 2026
d1e7637
tree: carry asset amounts through structure building
darioAnongba Aug 3, 2026
cec8001
tapassets: materialize asset trees via tap-sdk
darioAnongba Aug 3, 2026
c16d1fb
tapassets: assemble asset trees end to end
darioAnongba Aug 4, 2026
20efe3b
build: pin merged taproot-assets main
darioAnongba Aug 4, 2026
4fd55c9
tapassets: fix tree materialization against real tapd
darioAnongba Aug 4, 2026
f53eab6
multi: add asset tree e2e against real tapd
darioAnongba Aug 4, 2026
5681981
multi: adopt compressed MuSig2 participants
darioAnongba Aug 4, 2026
cdf2ca9
tree: add per-node sequence and paired asset context
darioAnongba Aug 4, 2026
9aef6f6
tapassets: register asset context on built trees
darioAnongba Aug 4, 2026
49a98c6
roundpb: carry asset tree data on the wire
darioAnongba Aug 4, 2026
5bb63d4
db: persist asset tree context in the tree codec
darioAnongba Aug 4, 2026
88df73c
round: derive node sequences from the flow version
darioAnongba Aug 4, 2026
d6b3154
build: pin caller-signed tap-sdk
darioAnongba Aug 5, 2026
32c7675
tapassets: derive and commit caller-funded batch anchors
darioAnongba Aug 5, 2026
fe08bab
tapassets: build the e2e tree on an unconfirmed batch anchor
darioAnongba Aug 5, 2026
3114628
build: pin merged tap-sdk main
darioAnongba Aug 5, 2026
3f8c555
tapassets: export the inventory verifier constructor
darioAnongba Aug 5, 2026
a81bbe2
tapassets: identify batch anchor commits
darioAnongba Aug 5, 2026
d9fa16c
tapassets: say funding UTXO instead of tranche
darioAnongba Aug 6, 2026
f8692df
tree: expose batch output taproot binding material
darioAnongba Aug 6, 2026
6c31ccd
tapassets: let tapd fill the funding input metadata
darioAnongba Aug 6, 2026
3158c54
tapassets: publish committed batch anchor transfers
darioAnongba Aug 6, 2026
dcfb2b2
tapassets: export the standard VTXO leaf anchor
darioAnongba Aug 6, 2026
bbf3cad
lib/tree: add single-wallet tree signing ceremony
darioAnongba Aug 6, 2026
0e4f6eb
roundpb: add asset fields to VTXO requests
darioAnongba Aug 6, 2026
c52f339
multi: carry asset VTXO request fields
darioAnongba Aug 6, 2026
e95fe61
multi: verify and sign asset trees on the client
darioAnongba Aug 6, 2026
c416e33
multi: accept asset VTXO requests via the round actor
darioAnongba Aug 6, 2026
00ecd38
round: treat the change target as advisory in the pre-flight
darioAnongba Aug 6, 2026
917c13a
tapassets: keep the structure total when re-keying node amounts
darioAnongba Aug 6, 2026
1e6e442
multi: carry asset boarding fields on the wire
darioAnongba Aug 6, 2026
afaa3f1
multi: disclose the boarding asset commitment leaf hash
darioAnongba Aug 6, 2026
e54c29a
tapassets: recompute composed boarding scripts from hashes
darioAnongba Aug 6, 2026
2fdffd4
multi: carry the boarded asset witness stack
darioAnongba Aug 6, 2026
ff52eb5
round: send the boarding asset disclosure fields
darioAnongba Aug 6, 2026
98e9aa5
tapassets: add the boarded proof verifier
darioAnongba Aug 6, 2026
9625819
multi: accept asset boarding intents via the round actor
darioAnongba Aug 6, 2026
311dbc5
tapassets: fund batch anchors from multiple sources
darioAnongba Aug 7, 2026
7395f60
lib/tree: format ceremony test
darioAnongba Aug 7, 2026
eb8d3bb
tapassets: reconstruct the commitment leaf hash
darioAnongba Aug 7, 2026
832d041
tapassets: retain the boarding disclosure on onboarding results
darioAnongba Aug 7, 2026
da30e1d
waved: expose the asset boarding disclosure
darioAnongba Aug 7, 2026
89145a0
harness: expose the tapd container's network name
darioAnongba Aug 7, 2026
4516a08
multi: disclose tapd's asset root as the commitment leaf hash
darioAnongba Aug 7, 2026
6fd08ac
tapassets: key boarding outputs to an OP_TRUE asset script
darioAnongba Aug 7, 2026
80a472b
round: give asset boarding intents their composed address
darioAnongba Aug 7, 2026
45e2c83
waved: use the boarding exit delay for boarding disclosures
darioAnongba Aug 7, 2026
4b2710e
round: prove asset boarding ownership over the composed output
darioAnongba Aug 7, 2026
f0e2e20
tapassets: report the mismatched keys when node binding fails
darioAnongba Aug 7, 2026
a697c24
tapassets: name the cosigners in the node binding error
darioAnongba Aug 7, 2026
ddade62
mod: bump tap-sdk to the multi-base merge fix
darioAnongba Aug 7, 2026
1426ff7
tapassets: name the node's child count on a binding failure
darioAnongba Aug 7, 2026
79e1a80
tree: stop key aggregation reordering the caller's cosigners
darioAnongba Aug 7, 2026
5ce308c
tapassets: base a batch path on the transition's own predecessor
darioAnongba Aug 7, 2026
290351f
mod: bump tap-sdk to the merging-step co-input fix
darioAnongba Aug 7, 2026
1e985f2
mod: bump tap-sdk to the co-input verifier context
darioAnongba Aug 7, 2026
77a4aad
waved: record an asset boarding before the round takes it
darioAnongba Aug 7, 2026
b5f7cfa
tree: drop the operator-local signing ceremony
darioAnongba Aug 7, 2026
4a6af8a
multi: remove direct on-chain asset VTXO registration
darioAnongba Aug 8, 2026
d51a994
multi: drop the residue left by removing direct registration
darioAnongba Aug 8, 2026
8c06fa9
round: record a leaf's asset identity so its carrier is protected
darioAnongba Aug 8, 2026
789a70d
multi: hand a round asset leaf its sealed package
darioAnongba Aug 8, 2026
c2725ba
mod: pin tap-sdk to the alternate-leaf commit-verify fix
darioAnongba Aug 8, 2026
cd595ca
mod: repin tap-sdk to main after #175 merged
darioAnongba Aug 10, 2026
2bc03cd
vtxo: never auto-refresh an asset-bearing VTXO
darioAnongba Aug 10, 2026
d73c1ef
unroll: withhold the final sweep of an asset-bearing target
darioAnongba Aug 10, 2026
3b213ba
wallet: skip composed boarding outputs in the boarding sweep
darioAnongba Aug 10, 2026
7526781
multi: reissue asset identity through a refresh
darioAnongba Aug 10, 2026
a9bb33c
round: compose the forfeit auth path for asset leaves
darioAnongba Aug 10, 2026
1625124
db: rehydrate asset identity on round-store VTXO loads
darioAnongba Aug 10, 2026
bfa58ef
multi: claim an exited asset VTXO into the tapd wallet
darioAnongba Aug 11, 2026
db246d7
waved: exempt asset VTXOs from the sats-based exit gate
darioAnongba Aug 11, 2026
d258e06
tapassets: read the claim script from the committed anchor
darioAnongba Aug 11, 2026
c04fde0
tapassets: archive the claim lineage before publishing
darioAnongba Aug 11, 2026
464ef85
mod: bump tap-sdk for the x-only DeclareScriptKey fix
darioAnongba Aug 11, 2026
1400709
mod: pin tap-sdk to main with the proof-file assembler merged
darioAnongba Aug 11, 2026
66b879c
vtxo: split incoming descriptor construction from Receive
darioAnongba Aug 11, 2026
b69752c
harness: default tapd to the released v0.8.1 image
darioAnongba Aug 12, 2026
66f8e57
tree: copy the cosigner set before session creation sorts it
darioAnongba Aug 12, 2026
e4a0b5c
mod: bump tap-sdk for the 32-bit size-guard fix
darioAnongba Aug 12, 2026
f167fd7
mod: pin tap-sdk to main with the 32-bit fix merged
darioAnongba Aug 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion arkrpc/ancestry_path_convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,41 @@ func AncestryPathFromTree(t *tree.Tree, commitmentTxID chainhash.Hash,

// AncestryPathToTree reconstructs a tree.Tree from an AncestryPath. Returns
// (nil, nil) when the path or its embedded tree_path is unset; callers must
// treat a nil tree as an absent ancestry.
// treat a nil tree as absent ancestry.
//
// A present tree_path with zero nodes is the explicit external-root variant.
// It reconstructs as a non-nil tree with Root == nil while retaining the exact
// BatchOutpoint and BatchOutput. Keeping it distinct from an absent tree lets
// receive validation bind a confirmed direct VTXO to its checkpoint without
// inventing a recovery transaction.
func AncestryPathToTree(p *AncestryPath) (*tree.Tree, error) {
if p == nil || p.TreePath == nil {
return nil, nil
}

if len(p.TreePath.Nodes) == 0 {
batchOutpoint, err := outpointFromProto(
p.TreePath.BatchOutpoint,
)
if err != nil {
return nil, fmt.Errorf("external root outpoint: %w",
err)
}

batchOutput, err := txOutFromProto(p.TreePath.BatchOutput)
if err != nil {
return nil, fmt.Errorf("external root output: %w", err)
}

return &tree.Tree{
BatchOutpoint: batchOutpoint,
BatchOutput: batchOutput,
SweepTapscriptRoot: append(
[]byte(nil), p.TreePath.SweepTapscriptRoot...,
),
}, nil
}

return TreePathToTree(p.TreePath)
}

Expand Down
53 changes: 53 additions & 0 deletions arkrpc/ancestry_path_convert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,59 @@ func TestAncestryPathRoundTrip(t *testing.T) {
}
}

// TestAncestryPathToTreeExternalRoot verifies that a present, zero-node
// tree_path remains distinguishable from absent ancestry. This is the wire
// sentinel used for a confirmed direct-on-chain VTXO: it has no Ark recovery
// transaction but must retain the exact outpoint and output spent by the
// first checkpoint.
func TestAncestryPathToTreeExternalRoot(t *testing.T) {
t.Parallel()

commitment := chainhash.Hash{
0x10, 0x20, 0x30,
}
pkScript := []byte{
0x51, 0x20, 0x01,
}

got, err := AncestryPathToTree(&AncestryPath{
TreePath: &TreePath{
BatchOutpoint: &OutPoint{
Txid: commitment[:],
Vout: 3,
},
BatchOutput: &TxOut{
Value: 4_321,
PkScript: pkScript,
},
},
})
if err != nil {
t.Fatalf("AncestryPathToTree: %v", err)
}

if got == nil {
t.Fatalf("decoded external-root tree is nil")
}
if got.Root != nil {
t.Fatalf("external-root sentinel unexpectedly has a root node")
}
if got.BatchOutpoint != (wire.OutPoint{
Hash: commitment,
Index: 3,
}) {

t.Fatalf("external-root outpoint mismatch: %v",
got.BatchOutpoint)
}
if got.BatchOutput == nil ||
got.BatchOutput.Value != 4_321 ||
!bytes.Equal(got.BatchOutput.PkScript, pkScript) {

t.Fatalf("external-root output mismatch: %v", got.BatchOutput)
}
}

// TestAncestryCommitmentTxIDRejectsBadLength ensures malformed commitment
// txid byte slices are rejected, not silently truncated.
func TestAncestryCommitmentTxIDRejectsBadLength(t *testing.T) {
Expand Down
148 changes: 135 additions & 13 deletions arkrpc/indexer.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading