diff --git a/asset/asset.go b/asset/asset.go index efa7ffacd..bc0a6363d 100644 --- a/asset/asset.go +++ b/asset/asset.go @@ -110,6 +110,9 @@ var ( // EmptyGenesis is the empty Genesis struct used for alt leaves. EmptyGenesis Genesis + // EmptyGenesisID is the ID of the empty genesis struct. + EmptyGenesisID = EmptyGenesis.ID() + // NUMSBytes is the NUMs point we'll use for un-spendable script keys. // It was generated via a try-and-increment approach using the phrase // "taproot-assets" with SHA2-256. The code for the try-and-increment @@ -128,6 +131,14 @@ var ( // ErrUnknownVersion is returned when an asset with an unknown asset // version is being used. ErrUnknownVersion = errors.New("asset: unknown asset version") + + // ErrUnwrapAssetID is returned when an asset ID cannot be unwrapped + // from a Specifier. + ErrUnwrapAssetID = errors.New("unable to unwrap asset ID") + + // ErrDuplicateAltLeafKey is returned when a slice of AltLeaves contains + // 2 or more AltLeaves with the same AssetCommitmentKey. + ErrDuplicateAltLeafKey = errors.New("duplicate alt leaf key") ) const ( @@ -241,12 +252,6 @@ func DecodeGenesis(r io.Reader) (Genesis, error) { return gen, err } -var ( - // ErrUnwrapAssetID is an error type which is returned when an asset ID - // cannot be unwrapped from a specifier. - ErrUnwrapAssetID = errors.New("unable to unwrap asset ID") -) - // Specifier is a type that can be used to specify an asset by its ID, its asset // group public key, or both. type Specifier struct { @@ -2794,13 +2799,25 @@ type ChainAsset struct { AnchorLeaseExpiry *time.Time } +// LeafKeySet is a set of leaf keys. +type LeafKeySet = fn.Set[[32]byte] + +// NewLeafKeySet creates a new leaf key set. +func NewLeafKeySet() LeafKeySet { + return fn.NewSet[[32]byte]() +} + // An AltLeaf is a type that is used to carry arbitrary data, and does not // represent a Taproot asset. An AltLeaf can be used to anchor other protocols // alongside Taproot Asset transactions. type AltLeaf[T any] interface { // Copyable asserts that the target type of this interface satisfies // the Copyable interface. - fn.Copyable[T] + fn.Copyable[*T] + + // AssetCommitmentKey is the key for an AltLeaf within an + // AssetCommitment. + AssetCommitmentKey() [32]byte // ValidateAltLeaf ensures that an AltLeaf is valid. ValidateAltLeaf() error @@ -2834,18 +2851,17 @@ func NewAltLeaf(key ScriptKey, keyVersion ScriptVersion, }, nil } -// CopyAltLeaf performs a deep copy of an AltLeaf. -func CopyAltLeaf[T AltLeaf[T]](a AltLeaf[T]) AltLeaf[T] { - return a.Copy() -} - // CopyAltLeaves performs a deep copy of an AltLeaf slice. -func CopyAltLeaves[T AltLeaf[T]](a []AltLeaf[T]) []AltLeaf[T] { - return fn.Map(a, CopyAltLeaf[T]) +func CopyAltLeaves(a []AltLeaf[Asset]) []AltLeaf[Asset] { + if len(a) == 0 { + return nil + } + + return ToAltLeaves(fn.CopyAll(FromAltLeaves(a))) } -// Validate checks that an Asset is a valid AltLeaf. An Asset used as an AltLeaf -// must meet these constraints: +// ValidateAltLeaf checks that an Asset is a valid AltLeaf. An Asset used as an +// AltLeaf must meet these constraints: // - Version must be V0. // - Genesis must be the empty Genesis. // - Amount, LockTime, and RelativeLockTime must be 0. @@ -2873,9 +2889,8 @@ func (a *Asset) ValidateAltLeaf() error { } if a.SplitCommitmentRoot != nil { - return fmt.Errorf( - "alt leaf split commitment root must be empty", - ) + return fmt.Errorf("alt leaf split commitment root must be " + + "empty") } if a.GroupKey != nil { @@ -2889,6 +2904,45 @@ func (a *Asset) ValidateAltLeaf() error { return nil } +// ValidAltLeaves checks that a set of Assets are valid AltLeaves, and can be +// used to construct an AltCommitment. This requires that each AltLeaf has a +// unique AssetCommitmentKey. +func ValidAltLeaves(leaves []AltLeaf[Asset]) error { + leafKeys := NewLeafKeySet() + return AddLeafKeysVerifyUnique(leafKeys, leaves) +} + +// AddLeafKeysVerifyUnique checks that a set of Assets are valid AltLeaves, and +// have unique AssetCommitmentKeys (unique among the given slice but also not +// colliding with any of the keys in the existingKeys set). If the leaves are +// valid, the function returns the updated set of keys. +func AddLeafKeysVerifyUnique(existingKeys LeafKeySet, + leaves []AltLeaf[Asset]) error { + + for _, leaf := range leaves { + err := leaf.ValidateAltLeaf() + if err != nil { + return err + } + + leafKey := leaf.AssetCommitmentKey() + if existingKeys.Contains(leafKey) { + return fmt.Errorf("%w: %x", ErrDuplicateAltLeafKey, + leafKey) + } + + existingKeys.Add(leafKey) + } + + return nil +} + +// IsAltLeaf returns true if an Asset would be stored in the AltCommitment of +// a TapCommitment. It does not check if the Asset is a valid AltLeaf. +func (a *Asset) IsAltLeaf() bool { + return a.GroupKey == nil && a.Genesis == EmptyGenesis +} + // encodeAltLeafRecords determines the set of non-nil records to include when // encoding an AltLeaf. Since the Genesis, Group Key, Amount, and Version fields // are static, we can omit those fields. @@ -2926,4 +2980,19 @@ func (a *Asset) DecodeAltLeaf(r io.Reader) error { } // Ensure Asset implements the AltLeaf interface. -var _ AltLeaf[*Asset] = (*Asset)(nil) +var _ AltLeaf[Asset] = (*Asset)(nil) + +// ToAltLeaves casts []Asset to []AltLeafAsset, without checking that the assets +// are valid AltLeaves. +func ToAltLeaves(leaves []*Asset) []AltLeaf[Asset] { + return fn.Map(leaves, func(l *Asset) AltLeaf[Asset] { + return l + }) +} + +// FromAltLeaves casts []AltLeafAsset to []Asset, which is always safe. +func FromAltLeaves(leaves []AltLeaf[Asset]) []*Asset { + return fn.Map(leaves, func(l AltLeaf[Asset]) *Asset { + return l.(*Asset) + }) +} diff --git a/asset/encoding.go b/asset/encoding.go index 6e99656aa..8a33ffb7a 100644 --- a/asset/encoding.go +++ b/asset/encoding.go @@ -809,7 +809,10 @@ func DecodeTapLeaf(leafData []byte) (*txscript.TapLeaf, error) { } func AltLeavesEncoder(w io.Writer, val any, buf *[8]byte) error { - if t, ok := val.(*[]AltLeaf[*Asset]); ok { + if t, ok := val.(*[]AltLeaf[Asset]); ok { + // If the AltLeaves slice is empty, we will still encode its + // length here (as 0). Callers should avoid encoding empty + // AltLeaves slices. if err := tlv.WriteVarInt(w, uint64(len(*t)), buf); err != nil { return err } @@ -852,7 +855,7 @@ func AltLeavesDecoder(r io.Reader, val any, buf *[8]byte, l uint64) error { return tlv.ErrRecordTooLarge } - if typ, ok := val.(*[]AltLeaf[*Asset]); ok { + if typ, ok := val.(*[]AltLeaf[Asset]); ok { // Each alt leaf is at least 42 bytes, which limits the total // number of aux leaves. So we don't need to enforce a strict // limit here. @@ -861,7 +864,7 @@ func AltLeavesDecoder(r io.Reader, val any, buf *[8]byte, l uint64) error { return err } - leaves := make([]AltLeaf[*Asset], 0, numItems) + leaves := make([]AltLeaf[Asset], 0, numItems) leafKeys := make(map[SerializedKey]struct{}) for i := uint64(0); i < numItems; i++ { var streamBytes []byte @@ -887,7 +890,7 @@ func AltLeavesDecoder(r io.Reader, val any, buf *[8]byte, l uint64) error { } leafKeys[leafKey] = struct{}{} - leaves = append(leaves, AltLeaf[*Asset](&leaf)) + leaves = append(leaves, AltLeaf[Asset](&leaf)) } *typ = leaves diff --git a/asset/mock.go b/asset/mock.go index 3b15651b6..5abd61c8e 100644 --- a/asset/mock.go +++ b/asset/mock.go @@ -6,6 +6,7 @@ import ( "crypto/sha256" "encoding/hex" "fmt" + "slices" "testing" "github.com/btcsuite/btcd/btcec/v2" @@ -151,6 +152,14 @@ func CheckAssetAsserts(a *Asset, checks ...AssetAssert) error { return nil } +// SortFunc is used to sort assets lexicographically by their script keys. +func SortFunc(a, b *Asset) int { + return bytes.Compare( + a.ScriptKey.PubKey.SerializeCompressed(), + b.ScriptKey.PubKey.SerializeCompressed(), + ) +} + // RandGenesis creates a random genesis for testing. func RandGenesis(t testing.TB, assetType Type) Genesis { t.Helper() @@ -660,6 +669,55 @@ func RandAssetWithValues(t testing.TB, genesis Genesis, groupKey *GroupKey, ) } +// RandAltLeaf generates a random Asset that is a valid AltLeaf. +func RandAltLeaf(t testing.TB) *Asset { + randWitness := []Witness{ + {TxWitness: test.RandTxWitnesses(t)}, + } + randKey := RandScriptKey(t) + randVersion := ScriptVersion(test.RandInt[uint16]()) + randLeaf, err := NewAltLeaf(randKey, randVersion, randWitness) + require.NoError(t, err) + require.NoError(t, randLeaf.ValidateAltLeaf()) + + return randLeaf +} + +// RandAltLeaves generates a random number of random alt leaves. +func RandAltLeaves(t testing.TB, nonZero bool) []*Asset { + // Limit the number of leaves to keep test vectors small. + maxLeaves := 4 + numLeaves := test.RandIntn(maxLeaves) + if nonZero { + numLeaves += 1 + } + + if numLeaves == 0 { + return nil + } + + altLeaves := make([]*Asset, numLeaves) + for idx := range numLeaves { + altLeaves[idx] = RandAltLeaf(t) + } + + return altLeaves +} + +// CompareAltLeaves compares two slices of AltLeafAssets for equality. +func CompareAltLeaves(t *testing.T, a, b []AltLeaf[Asset]) { + require.Equal(t, len(a), len(b)) + + aInner := FromAltLeaves(a) + bInner := FromAltLeaves(b) + + slices.SortStableFunc(aInner, SortFunc) + slices.SortStableFunc(bInner, SortFunc) + for idx := range aInner { + require.True(t, aInner[idx].DeepEqual(bInner[idx])) + } +} + type ValidTestCase struct { Asset *TestAsset `json:"asset"` Expected string `json:"expected"` diff --git a/commitment/commitment_test.go b/commitment/commitment_test.go index b84aa08b5..30241a1f9 100644 --- a/commitment/commitment_test.go +++ b/commitment/commitment_test.go @@ -1164,7 +1164,7 @@ func TestUpdateTapCommitment(t *testing.T) { groupKey1 := asset.RandGroupKey(t, genesis1, protoAsset1) groupKey2 := asset.RandGroupKey(t, genesis2, protoAsset2) - // We also create a thirds asset which is in the same group as the first + // We also create a third asset which is in the same group as the first // one, to ensure that we can properly create Taproot Asset commitments // from asset commitments of the same group. genesis3 := asset.RandGenesis(t, asset.Normal) @@ -1316,6 +1316,90 @@ func TestUpdateTapCommitment(t *testing.T) { ) } +// TestTapCommitmentAltLeaves asserts that we can properly fetch, trim, and +// merge alt leaves to and from a TapCommitment. +func TestTapCommitmentAltLeaves(t *testing.T) { + t.Parallel() + + // Create two random assets, to populate our Tap commitment. + asset1 := asset.RandAsset(t, asset.Normal) + asset2 := asset.RandAsset(t, asset.Collectible) + + // We'll create three AltLeaves. Leaves 1 and 2 are valid, and leaf 3 + // will collide with leaf 1. + leaf1 := asset.RandAltLeaf(t) + leaf2 := asset.RandAltLeaf(t) + leaf3 := asset.RandAltLeaf(t) + leaf3.ScriptKey.PubKey = leaf1.ScriptKey.PubKey + leaf4 := asset.RandAltLeaf(t) + + // Create our initial, asset-only, Tap commitment. + commitment, err := FromAssets(nil, asset1, asset2) + require.NoError(t, err) + assetOnlyTapLeaf := commitment.TapLeaf() + + // If we try to trim any alt leaves, we should get none back. + _, altLeaves, err := TrimAltLeaves(commitment) + require.NoError(t, err) + require.Empty(t, altLeaves) + + // Trying to merge colliding alt leaves should fail. + err = commitment.MergeAltLeaves([]asset.AltLeaf[asset.Asset]{ + leaf1, leaf3, + }) + require.ErrorIs(t, err, asset.ErrDuplicateAltLeafKey) + + // Merging non-colliding, valid alt leaves should succeed. The new + // commitment should contain three AssetCommitments, since we've created + // an AltCommitment. + err = commitment.MergeAltLeaves([]asset.AltLeaf[asset.Asset]{ + leaf1, leaf2, + }) + require.NoError(t, err) + require.Len(t, commitment.assetCommitments, 3) + + // Trying to merge an alt leaf that will collide with an existing leaf + // should also fail. + err = commitment.MergeAltLeaves([]asset.AltLeaf[asset.Asset]{leaf3}) + require.ErrorIs(t, err, asset.ErrDuplicateAltLeafKey) + + // Merging a valid, non-colliding, new alt leaf into an existing + // AltCommitment should succeed. + err = commitment.MergeAltLeaves([]asset.AltLeaf[asset.Asset]{leaf4}) + require.NoError(t, err) + + // If we fetch the alt leaves, they should not be removed from the + // commitment. + finalTapLeaf := commitment.TapLeaf() + fetchedAltLeaves, err := commitment.FetchAltLeaves() + require.NoError(t, err) + require.Equal(t, finalTapLeaf, commitment.TapLeaf()) + insertedAltLeaves := []*asset.Asset{leaf1, leaf2, leaf4} + + // The fetched leaves must be equal to the three leaves we successfully + // inserted. + asset.CompareAltLeaves( + t, asset.ToAltLeaves(insertedAltLeaves), + asset.ToAltLeaves(fetchedAltLeaves), + ) + + // Now, if we trim out the alt leaves, the AltCommitment should be fully + // removed. + originalCommitment, _, err := TrimAltLeaves(commitment) + require.NoError(t, err) + + trimmedTapLeaf := originalCommitment.TapLeaf() + require.NotEqual(t, finalTapLeaf, trimmedTapLeaf) + require.Equal(t, assetOnlyTapLeaf, trimmedTapLeaf) + + // The trimmed leaves should match the leaves we successfully merged + // into the commitment. + asset.CompareAltLeaves( + t, asset.ToAltLeaves(fetchedAltLeaves), + asset.ToAltLeaves(insertedAltLeaves), + ) +} + // TestAssetCommitmentDeepCopy tests that we're able to properly perform a deep // copy of a given asset commitment. func TestAssetCommitmentDeepCopy(t *testing.T) { diff --git a/commitment/tap.go b/commitment/tap.go index 0ce4d478b..e13345cc8 100644 --- a/commitment/tap.go +++ b/commitment/tap.go @@ -653,3 +653,102 @@ func TrimSplitWitnesses(version *TapCommitmentVersion, return tapCommitment, nil } + +// TrimAltLeaves creates a new TapCommitment with any AltLeaves removed, if +// present. The removed AltLeaves are returned separately. +func TrimAltLeaves(c *TapCommitment) (*TapCommitment, []*asset.Asset, error) { + altAssets, err := c.FetchAltLeaves() + if err != nil { + return nil, nil, fmt.Errorf("cannot trim: %w", err) + } + + // Remove the AltCommitment and reconstruct the Tap commitment. + allCommitments := c.Commitments() + delete(allCommitments, asset.EmptyGenesisID) + + tapCommitment, err := NewTapCommitment( + &c.Version, maps.Values(allCommitments)..., + ) + if err != nil { + return nil, nil, err + } + + return tapCommitment, altAssets, nil +} + +// FetchAltLeaves returns a copy of any AltLeaves present in the TapCommitment. +func (c *TapCommitment) FetchAltLeaves() ([]*asset.Asset, error) { + if c.assetCommitments == nil { + return nil, errors.New("tap commitment has no leaves") + } + + altCommit := c.assetCommitments[asset.EmptyGenesisID] + if altCommit == nil { + return nil, nil + } + + return maps.Values(altCommit.Assets()), nil +} + +// MergeAltLeaves adds a set of AltLeaves to an existing TapCommitment. Merging +// fails if the new AltLeaves collide with any existing AltLeaves. +func (c *TapCommitment) MergeAltLeaves( + altLeaves []asset.AltLeaf[asset.Asset]) error { + + if len(altLeaves) == 0 { + return nil + } + + // First, check that the given alt leaves have unique + // AssetCommitmentKeys. + newLeafKeys := asset.NewLeafKeySet() + err := asset.AddLeafKeysVerifyUnique(newLeafKeys, altLeaves) + if err != nil { + return err + } + + // Check if any alt leaves are already present. + var currentAltCommit *AssetCommitment + if c.assetCommitments != nil { + currentAltCommit = c.assetCommitments[asset.EmptyGenesisID] + if currentAltCommit != nil { + currentLeaves := currentAltCommit.Assets() + + // If any alt leaves are already committed, new alt + // leaves must not collide with existing alt leaves. + for leafKey := range currentLeaves { + if newLeafKeys.Contains(leafKey) { + return fmt.Errorf("%w: existing alt "+ + "leaf: %x", + asset.ErrDuplicateAltLeafKey, + leafKey) + } + } + } + } + + // None of the new or existing alt leaves collide; we can now update + // the AltCommitment and Tap commitment. + if currentAltCommit == nil { + currentAltCommit, err = NewAssetCommitment( + altLeaves[0].(*asset.Asset), + ) + if err != nil { + return err + } + } + + for _, newLeaf := range altLeaves { + err := currentAltCommit.Upsert(newLeaf.(*asset.Asset)) + if err != nil { + return err + } + } + + err = c.Upsert(currentAltCommit) + if err != nil { + return err + } + + return nil +} diff --git a/itest/addrs_test.go b/itest/addrs_test.go index ddedb7227..c76f4c61d 100644 --- a/itest/addrs_test.go +++ b/itest/addrs_test.go @@ -242,6 +242,10 @@ func testAddresses(t *harnessTest) { MineBlocks(t.t, t.lndHarness.Miner().Client, 1, 1) AssertAddrEvent(t.t, secondTapd, newAddr, 1, statusConfirmed) AssertNonInteractiveRecvComplete(t.t, secondTapd, 4) + + // The received asset should have a transition proof with no altLeaves. + emptyLeafMap := make(map[string][]*asset.Asset) + AssertProofAltLeaves(t.t, secondTapd, manualAsset, emptyLeafMap) } // testMultiAddress tests that we can send assets to multiple addresses at the diff --git a/itest/assertions.go b/itest/assertions.go index ca8b4042d..4f6fb6d13 100644 --- a/itest/assertions.go +++ b/itest/assertions.go @@ -521,6 +521,59 @@ func AssertAssetProofs(t *testing.T, tapClient taprpc.TaprootAssetsClient, return exportResp.RawProofFile } +// AssertProofAltLeaves makes sure that, for a given asset, the latest proof +// commits to an expected set of altLeaves. +func AssertProofAltLeaves(t *testing.T, tapClient taprpc.TaprootAssetsClient, + a *taprpc.Asset, leafMap map[string][]*asset.Asset) { + + t.Helper() + ctxb := context.Background() + ctxt, cancel := context.WithTimeout(ctxb, defaultWaitTimeout) + defer cancel() + + // Fetch the latest proof for the given asset. + scriptKey := a.ScriptKey + proofReq := taprpc.ExportProofRequest{ + AssetId: a.AssetGenesis.AssetId, + ScriptKey: scriptKey, + } + exportResp, err := tapClient.ExportProof(ctxt, &proofReq) + require.NoError(t, err) + + decodeReq := taprpc.DecodeProofRequest{ + RawProof: exportResp.RawProofFile, + } + decodeResp, err := tapClient.DecodeProof(ctxt, &decodeReq) + require.NoError(t, err) + + // Check if we expect the asset to be anchored alongside alt leaves or + // not. E.x. a passive asset created inside the freighter will not be + // anchored with any alt leaves. + altLeavesBytes := decodeResp.DecodedProof.AltLeaves + expectedAltLeaves, ok := leafMap[string(scriptKey)] + emptyAltLeaves := len(altLeavesBytes) == 0 + + require.Equal(t, ok, !emptyAltLeaves) + if emptyAltLeaves { + return + } + + // If we have altLeaves, decode them and check that they match the + // expected leaves. + var ( + r = bytes.NewReader(altLeavesBytes) + l = uint64(len(altLeavesBytes)) + scratch [8]byte + val []asset.AltLeaf[asset.Asset] + ) + + require.NoError(t, asset.AltLeavesDecoder(r, &val, &scratch, l)) + asset.CompareAltLeaves(t, asset.ToAltLeaves(expectedAltLeaves), val) + t.Logf("matching alt leaves for: %v, %x, %x: %d leaves", + a.ChainAnchor.AnchorOutpoint, a.AssetGenesis.AssetId, + a.ScriptKey, len(val)) +} + // AssertMintingProofs make sure the asset minting proofs contain all the // correct reveal information. func AssertMintingProofs(t *testing.T, tapd *tapdHarness, diff --git a/itest/assets_test.go b/itest/assets_test.go index e6a7224f0..2ebeb6c6d 100644 --- a/itest/assets_test.go +++ b/itest/assets_test.go @@ -150,6 +150,15 @@ func testMintAssets(t *harnessTest) { // them, so we don't expect them to show up with script_key_is_local set // to true in the list of assets. transferAssetProofs(t, t.tapd, secondTapd, allAssets, false) + + // Check that all the imported genesis proofs have no altLeaves. + emptyLeafMap := make(map[string][]*asset.Asset) + for _, asset := range rpcIssuableAssets { + AssertProofAltLeaves(t.t, secondTapd, asset, emptyLeafMap) + } + for _, asset := range rpcSimpleAssets { + AssertProofAltLeaves(t.t, secondTapd, asset, emptyLeafMap) + } } // testMintBatchResume tests that we're able to create a pending batch, restart diff --git a/itest/psbt_test.go b/itest/psbt_test.go index 3b3665a44..e04009559 100644 --- a/itest/psbt_test.go +++ b/itest/psbt_test.go @@ -608,12 +608,19 @@ func runPsbtInteractiveFullValueSendTest(ctxt context.Context, t *harnessTest, receiverScriptKey, receiverAnchorIntKeyDesc := DeriveKeys( t.t, receiver, ) + receiverScriptKeyBytes := receiverScriptKey.PubKey. + SerializeCompressed() vPkt := tappsbt.ForInteractiveSend( id, fullAmt, receiverScriptKey, 0, 0, 0, - receiverAnchorIntKeyDesc, asset.V0, - chainParams, + receiverAnchorIntKeyDesc, asset.V0, chainParams, ) + altLeaves := asset.RandAltLeaves(t.t, true) + leafMap := map[string][]*asset.Asset{ + string(receiverScriptKeyBytes): altLeaves, + } + err := vPkt.Outputs[0].SetAltLeaves(altLeaves) + require.NoError(t.t, err) // Next, we'll attempt to complete a transfer with PSBTs from // our sender node to our receiver, using the full amount. @@ -644,8 +651,8 @@ func runPsbtInteractiveFullValueSendTest(ctxt context.Context, t *harnessTest, // This is an interactive transfer, so we do need to manually // send the proof from the sender to the receiver. _ = sendProof( - t, sender, receiver, sendResp, - receiverScriptKey.PubKey.SerializeCompressed(), genInfo, + t, sender, receiver, sendResp, receiverScriptKeyBytes, + genInfo, ) senderAssets, err := sender.ListAssets( @@ -674,6 +681,12 @@ func runPsbtInteractiveFullValueSendTest(ctxt context.Context, t *harnessTest, t.t, receivedAssets, genInfo.Name, genInfo.MetaHash, AssetAmountCheck(fullAmt), ) + + // Check that the altLeaves from the receiver's vPacket were set + // by the sender correctly. + for _, asset := range receiverAssets.Assets { + AssertProofAltLeaves(t.t, receiver, asset, leafMap) + } } // Finally, make sure we can still send out the passive asset. @@ -822,11 +835,19 @@ func runPsbtInteractiveSplitSendTest(ctxt context.Context, t *harnessTest, receiverScriptKey, receiverAnchorIntKeyDesc := DeriveKeys( t.t, receiver, ) + receiverScriptKeyBytes := receiverScriptKey.PubKey. + SerializeCompressed() vPkt := tappsbt.ForInteractiveSend( id, sendAmt, receiverScriptKey, 0, 0, 0, receiverAnchorIntKeyDesc, asset.V0, chainParams, ) + altLeaves := asset.RandAltLeaves(t.t, true) + leafMap := map[string][]*asset.Asset{ + string(receiverScriptKeyBytes): altLeaves, + } + err := vPkt.Outputs[0].SetAltLeaves(altLeaves) + require.NoError(t.t, err) // Next, we'll attempt to complete a transfer with PSBTs from // our sender node to our receiver, using the partial amount. @@ -857,8 +878,8 @@ func runPsbtInteractiveSplitSendTest(ctxt context.Context, t *harnessTest, // This is an interactive transfer, so we do need to manually // send the proof from the sender to the receiver. _ = sendProof( - t, sender, receiver, sendResp, - receiverScriptKey.PubKey.SerializeCompressed(), genInfo, + t, sender, receiver, sendResp, receiverScriptKeyBytes, + genInfo, ) senderAssets, err := sender.ListAssets( @@ -890,6 +911,12 @@ func runPsbtInteractiveSplitSendTest(ctxt context.Context, t *harnessTest, ) require.NoError(t.t, err) require.Len(t.t, receiverAssets.Assets, numReceiverAssets) + + // Check that the altLeaves from the receiver's vPacket were set + // by the sender correctly. + for _, asset := range receiverAssets.Assets { + AssertProofAltLeaves(t.t, receiver, asset, leafMap) + } } // Finally, make sure we can still send out the passive asset. @@ -900,6 +927,220 @@ func runPsbtInteractiveSplitSendTest(ctxt context.Context, t *harnessTest, ) } +// testPsbtInteractiveAltLeafAnchoring tests that the tapfreighter and PSBT flow +// RPC calls will reject a vPkt with invalid AltLeaves. It also tests that +// AltLeaves from multiple vOutputs are merged into one anchor output correctly. +func testPsbtInteractiveAltLeafAnchoring(t *harnessTest) { + // First, we'll make a normal asset with a bunch of units. We're also + // minting a passive asset that should remain where it is. + rpcAssets := MintAssetsConfirmBatch( + t.t, t.lndHarness.Miner().Client, t.tapd, + []*mintrpc.MintAssetRequest{ + issuableAssets[0], + // Our "passive" asset. + { + Asset: &mintrpc.MintAsset{ + AssetType: taprpc.AssetType_NORMAL, + Name: "itestbuxx-passive", + AssetMeta: &taprpc.AssetMeta{ + Data: []byte("some metadata"), + }, + Amount: 123, + }, + }, + }, + ) + + mintedAsset := rpcAssets[0] + genInfo := rpcAssets[0].AssetGenesis + + ctxb := context.Background() + ctxt, cancel := context.WithTimeout(ctxb, defaultWaitTimeout) + defer cancel() + + // Now that we have the asset created, we'll make a new node that'll + // serve as the node which'll receive the assets. + secondTapd := setupTapdHarness( + t.t, t, t.lndHarness.Bob, t.universeServer, + ) + defer func() { + require.NoError(t.t, secondTapd.stop(!*noDelete)) + }() + + var ( + sender = t.tapd + senderLnd = t.lndHarness.Alice + receiver = secondTapd + id = fn.ToArray[[32]byte](genInfo.AssetId) + partialAmt = mintedAsset.Amount / 4 + chainParams = &address.RegressionNetTap + ) + + // Now, let's create a vPkt for receiving the active asset. We'll use + // two outputs with different script keys and different altLeaves. + receiverScriptKey1, receiverAnchorIntKeyDesc := DeriveKeys( + t.t, receiver, + ) + receiverScriptKey1Bytes := receiverScriptKey1.PubKey. + SerializeCompressed() + receiverScriptKey2, _ := DeriveKeys(t.t, receiver) + receiverScriptKey2Bytes := receiverScriptKey2.PubKey. + SerializeCompressed() + + vPkt := tappsbt.ForInteractiveSend( + id, partialAmt, receiverScriptKey1, 0, 0, 0, + receiverAnchorIntKeyDesc, asset.V0, chainParams, + ) + tappsbt.AddOutput( + vPkt, partialAmt*2, receiverScriptKey2, 0, + receiverAnchorIntKeyDesc, asset.V0, + ) + + // Let's make multiple sets of altLeaves. Set 1 and 2 should be valid + // if they were combined, but set 3 is a subset of set 1. If we submit + // two vPkts with sets 1 and 3, they should be rejected. + altLeaves1 := asset.RandAltLeaves(t.t, true) + altLeaves2 := asset.RandAltLeaves(t.t, true) + altLeaves3 := []*asset.Asset{altLeaves1[0].Copy()} + + require.NoError(t.t, vPkt.Outputs[0].SetAltLeaves(altLeaves1)) + require.NoError(t.t, vPkt.Outputs[1].SetAltLeaves(altLeaves3)) + + // Packet funding with conflicting altLeaves should fail. + _, err := maybeFundPacket(t, sender, vPkt) + require.ErrorContains(t.t, err, asset.ErrDuplicateAltLeafKey.Error()) + + // Let's unset the conflicting altLeaf, sign the vPkt, re-add the + // conflicting altLeaf, and try to anchor the vPkt. + vPkt.Outputs[1].AltLeaves = nil + + fundResp := fundPacket(t, sender, vPkt) + signActiveResp, err := sender.SignVirtualPsbt( + ctxt, &wrpc.SignVirtualPsbtRequest{ + FundedPsbt: fundResp.FundedPsbt, + }, + ) + require.NoError(t.t, err) + require.Len(t.t, fundResp.PassiveAssetPsbts, 1) + + signPassiveResp, err := sender.SignVirtualPsbt( + ctxt, &wrpc.SignVirtualPsbtRequest{ + FundedPsbt: fundResp.PassiveAssetPsbts[0], + }, + ) + require.NoError(t.t, err) + + passivevPkt, err := tappsbt.Decode(signPassiveResp.SignedPsbt) + require.NoError(t.t, err) + + signedvPkt, err := tappsbt.Decode(signActiveResp.SignedPsbt) + require.NoError(t.t, err) + + signedvPktCopy := signedvPkt.Copy() + require.NoError(t.t, signedvPkt.Outputs[1].SetAltLeaves(altLeaves3)) + signedvPktBytes, err := tappsbt.Encode(signedvPkt) + require.NoError(t.t, err) + + // Anchoring this vPkt should fail when creating the Tap commitments for + // each anchor output. + _, err = sender.AnchorVirtualPsbts( + ctxt, &wrpc.AnchorVirtualPsbtsRequest{ + VirtualPsbts: [][]byte{signedvPktBytes}, + }, + ) + require.ErrorContains(t.t, err, asset.ErrDuplicateAltLeafKey.Error()) + + // Trying to anchor the vPkt via the PSBT flow should also fail, for the + // same reason. + allPackets := []*tappsbt.VPacket{signedvPkt, passivevPkt} + btcPacket, err := tapsend.PrepareAnchoringTemplate(allPackets) + require.NoError(t.t, err) + + var btcPacketBuf bytes.Buffer + require.NoError(t.t, btcPacket.Serialize(&btcPacketBuf)) + + commitReq := &wrpc.CommitVirtualPsbtsRequest{ + VirtualPsbts: [][]byte{signedvPktBytes}, + PassiveAssetPsbts: [][]byte{signPassiveResp.SignedPsbt}, + AnchorPsbt: btcPacketBuf.Bytes(), + Fees: &wrpc.CommitVirtualPsbtsRequest_SatPerVbyte{ + SatPerVbyte: uint64(feeRateSatPerKVByte / 1000), + }, + AnchorChangeOutput: &wrpc.CommitVirtualPsbtsRequest_Add{ + Add: true, + }, + } + _, err = sender.CommitVirtualPsbts(ctxt, commitReq) + require.ErrorContains(t.t, err, asset.ErrDuplicateAltLeafKey.Error()) + + // Now, let's set non-conflicting altLeaves for the second vOutput, and + // complete the transfer via the PSBT flow. This should succeed. + require.NoError(t.t, signedvPktCopy.Outputs[1].SetAltLeaves(altLeaves2)) + signedvPktBytes, err = tappsbt.Encode(signedvPktCopy) + + require.NoError(t.t, err) + + commitReq.VirtualPsbts = [][]byte{signedvPktBytes} + commitResp, err := sender.CommitVirtualPsbts(ctxt, commitReq) + require.NoError(t.t, err) + + commitPacket, err := psbt.NewFromRawBytes( + bytes.NewReader(commitResp.AnchorPsbt), false, + ) + require.NoError(t.t, err) + require.Len(t.t, commitResp.VirtualPsbts, 1) + require.Len(t.t, commitResp.PassiveAssetPsbts, 1) + + activePacket, err := tappsbt.Decode(commitResp.VirtualPsbts[0]) + require.NoError(t.t, err) + + passivePacket, err := tappsbt.Decode(commitResp.PassiveAssetPsbts[0]) + require.NoError(t.t, err) + + commitPacket = signPacket(t.t, senderLnd, commitPacket) + commitPacket = FinalizePacket(t.t, senderLnd.RPC, commitPacket) + publishResp := LogAndPublish( + t.t, sender, commitPacket, []*tappsbt.VPacket{activePacket}, + []*tappsbt.VPacket{passivePacket}, commitResp, + ) + + expectedAmounts := []uint64{ + partialAmt, partialAmt * 2, partialAmt, + } + ConfirmAndAssertOutboundTransferWithOutputs( + t.t, t.lndHarness.Miner().Client, sender, publishResp, + genInfo.AssetId, expectedAmounts, 0, 1, len(expectedAmounts), + ) + + // This is an interactive transfer, so we do need to manually send the + // proofs from the sender to the receiver. + _ = sendProof( + t, sender, receiver, publishResp, receiverScriptKey1Bytes, + genInfo, + ) + _ = sendProof( + t, sender, receiver, publishResp, receiverScriptKey2Bytes, + genInfo, + ) + + // Now, both output proofs should contain altLeaf sets 1 and 2, since + // our two vOutputs should be committed in the same anchor output. + receiverAssets, err := receiver.ListAssets( + ctxt, &taprpc.ListAssetRequest{}, + ) + require.NoError(t.t, err) + + allAltLeaves := append(altLeaves1, altLeaves2...) + leafMap := map[string][]*asset.Asset{ + string(receiverScriptKey1Bytes): allAltLeaves, + string(receiverScriptKey2Bytes): allAltLeaves, + } + + for _, asset := range receiverAssets.Assets { + AssertProofAltLeaves(t.t, receiver, asset, leafMap) + } +} + // testPsbtInteractiveTapscriptSibling tests that we can send assets to an // anchor output that also commits to a tapscript sibling. func testPsbtInteractiveTapscriptSibling(t *harnessTest) { diff --git a/itest/test_list_on_test.go b/itest/test_list_on_test.go index 9757509bb..7a5a661dc 100644 --- a/itest/test_list_on_test.go +++ b/itest/test_list_on_test.go @@ -253,6 +253,10 @@ var testCases = []*testCase{ name: "multi input psbt single asset id", test: testMultiInputPsbtSingleAssetID, }, + { + name: "psbt alt leaf anchoring", + test: testPsbtInteractiveAltLeafAnchoring, + }, { name: "universe REST API", test: testUniverseREST, diff --git a/proof/append.go b/proof/append.go index 5d75790b5..2c50f8952 100644 --- a/proof/append.go +++ b/proof/append.go @@ -135,6 +135,16 @@ func CreateTransitionProof(prevOut wire.OutPoint, proof.Asset = *params.NewAsset.Copy() + // Copy any AltLeaves from the anchor commitment to the proof. + altLeaves, err := params.TaprootAssetRoot.FetchAltLeaves() + if err != nil { + return nil, err + } + + if len(altLeaves) > 0 { + proof.AltLeaves = asset.ToAltLeaves(altLeaves) + } + // With the base information contained, we'll now need to generate our // series of MS-SMT inclusion proofs that prove the existence of the // asset. diff --git a/proof/append_test.go b/proof/append_test.go index 962c3e012..d1ee41ae6 100644 --- a/proof/append_test.go +++ b/proof/append_test.go @@ -133,6 +133,11 @@ func runAppendTransitionTest(t *testing.T, assetType asset.Type, amt uint64, tapCommitment, err := commitment.NewTapCommitment(nil, assetCommitment) require.NoError(t, err) + // Add some alt leaves to the commitment anchoring the asset transfer. + altLeaves := asset.ToAltLeaves(asset.RandAltLeaves(t, true)) + err = tapCommitment.MergeAltLeaves(altLeaves) + require.NoError(t, err) + tapscriptRoot := tapCommitment.TapscriptRoot(nil) taprootKey := txscript.ComputeTaprootOutputKey( recipientTaprootInternalKey, tapscriptRoot[:], @@ -213,6 +218,7 @@ func runAppendTransitionTest(t *testing.T, assetType asset.Type, amt uint64, require.NoError(t, err) require.Greater(t, len(transitionBlob), len(genesisBlob)) require.Equal(t, txMerkleProof, &transitionProof.TxMerkleProof) + asset.CompareAltLeaves(t, altLeaves, transitionProof.AltLeaves) verifyBlob(t, transitionBlob) // Stop here if we don't test asset splitting. @@ -281,18 +287,27 @@ func runAppendTransitionTest(t *testing.T, assetType asset.Type, amt uint64, split3AssetNoSplitProof, ) require.NoError(t, err) + split1AltLeaves := asset.ToAltLeaves(asset.RandAltLeaves(t, true)) + split2AltLeaves := asset.ToAltLeaves(asset.RandAltLeaves(t, true)) + split3AltLeaves := asset.ToAltLeaves(asset.RandAltLeaves(t, true)) tap1Commitment, err := commitment.NewTapCommitment( nil, split1Commitment, ) require.NoError(t, err) + err = tap1Commitment.MergeAltLeaves(split1AltLeaves) + require.NoError(t, err) tap2Commitment, err := commitment.NewTapCommitment( nil, split2Commitment, ) require.NoError(t, err) + err = tap2Commitment.MergeAltLeaves(split2AltLeaves) + require.NoError(t, err) tap3Commitment, err := commitment.NewTapCommitment( nil, split3Commitment, ) require.NoError(t, err) + err = tap3Commitment.MergeAltLeaves(split3AltLeaves) + require.NoError(t, err) tapscript1Root := tap1Commitment.TapscriptRoot(nil) tapscript2Root := tap2Commitment.TapscriptRoot(nil) @@ -412,6 +427,7 @@ func runAppendTransitionTest(t *testing.T, assetType asset.Type, amt uint64, require.NoError(t, err) require.Greater(t, len(split1Blob), len(transitionBlob)) require.Equal(t, splitTxMerkleProof, &split1Proof.TxMerkleProof) + asset.CompareAltLeaves(t, split1AltLeaves, split1Proof.AltLeaves) split1Snapshot := verifyBlob(t, split1Blob) require.False(t, split1Snapshot.SplitAsset) @@ -454,6 +470,7 @@ func runAppendTransitionTest(t *testing.T, assetType asset.Type, amt uint64, require.NoError(t, err) require.Greater(t, len(split2Blob), len(transitionBlob)) require.Equal(t, splitTxMerkleProof, &split2Proof.TxMerkleProof) + asset.CompareAltLeaves(t, split2AltLeaves, split2Proof.AltLeaves) split2Snapshot := verifyBlob(t, split2Blob) require.True(t, split2Snapshot.SplitAsset) @@ -497,6 +514,7 @@ func runAppendTransitionTest(t *testing.T, assetType asset.Type, amt uint64, require.NoError(t, err) require.Greater(t, len(split3Blob), len(transitionBlob)) require.Equal(t, splitTxMerkleProof, &split3Proof.TxMerkleProof) + asset.CompareAltLeaves(t, split3AltLeaves, split3Proof.AltLeaves) split3Snapshot := verifyBlob(t, split3Blob) require.True(t, split3Snapshot.SplitAsset) diff --git a/proof/mock.go b/proof/mock.go index 71bea49a4..0a401c811 100644 --- a/proof/mock.go +++ b/proof/mock.go @@ -621,6 +621,21 @@ func NewTestFromProof(t testing.TB, p *Proof) *TestProof { ) } + if len(p.AltLeaves) > 0 { + // Assert that the concrete type of AltLeaf is supported. + require.IsTypef( + t, &asset.Asset{}, p.AltLeaves[0], + "AltLeaves must be of type *asset.Asset", + ) + + tp.AltLeaves = make([]*asset.TestAsset, len(p.AltLeaves)) + for idx := range p.AltLeaves { + // We also need a type assertion on each leaf. + leaf := p.AltLeaves[idx].(*asset.Asset) + tp.AltLeaves[idx] = asset.NewTestFromAsset(t, leaf) + } + } + return tp } @@ -639,6 +654,7 @@ type TestProof struct { ChallengeWitness []string `json:"challenge_witness"` GenesisReveal *asset.TestGenesisReveal `json:"genesis_reveal"` GroupKeyReveal *asset.TestGroupKeyReveal `json:"group_key_reveal"` + AltLeaves []*asset.TestAsset `json:"alt_leaves"` UnknownOddTypes tlv.TypeMap `json:"unknown_odd_types"` } @@ -697,6 +713,15 @@ func (tp *TestProof) ToProof(t testing.TB) *Proof { p.GroupKeyReveal = tp.GroupKeyReveal.ToGroupKeyReveal(t) } + if len(tp.AltLeaves) > 0 { + p.AltLeaves = make( + []asset.AltLeaf[asset.Asset], len(tp.AltLeaves), + ) + for idx, leaf := range tp.AltLeaves { + p.AltLeaves[idx] = leaf.ToAsset(t) + } + } + return p } diff --git a/proof/proof.go b/proof/proof.go index d893daebf..657a4eda7 100644 --- a/proof/proof.go +++ b/proof/proof.go @@ -309,6 +309,12 @@ type Proof struct { // require only a valid signature for the previously revealed group key. GroupKeyReveal asset.GroupKeyReveal + // AltLeaves represent data used to construct an Asset commitment, that + // was inserted in the output anchor Tap commitment. These data-carrying + // leaves are used for a purpose distinct from representing individual + // Taproot Assets. + AltLeaves []asset.AltLeaf[asset.Asset] + // UnknownOddTypes is a map of unknown odd types that were encountered // during decoding. This map is used to preserve unknown types that we // don't know of yet, so we can still encode them back when serializing. @@ -329,7 +335,7 @@ func (p *Proof) OutPoint() wire.OutPoint { // EncodeRecords returns the set of known TLV records to encode a Proof. func (p *Proof) EncodeRecords() []tlv.Record { - records := make([]tlv.Record, 0, 15) + records := make([]tlv.Record, 0, 16) records = append(records, VersionRecord(&p.Version)) records = append(records, PrevOutRecord(&p.PrevOut)) records = append(records, BlockHeaderRecord(&p.BlockHeader)) @@ -369,6 +375,9 @@ func (p *Proof) EncodeRecords() []tlv.Record { &p.GroupKeyReveal, )) } + if len(p.AltLeaves) > 0 { + records = append(records, AltLeavesRecord(&p.AltLeaves)) + } // Add any unknown odd types that were encountered during decoding. return asset.CombineRecords(records, p.UnknownOddTypes) @@ -392,6 +401,7 @@ func (p *Proof) DecodeRecords() []tlv.Record { BlockHeightRecord(&p.BlockHeight), GenesisRevealRecord(&p.GenesisReveal), GroupKeyRevealRecord(&p.GroupKeyReveal), + AltLeavesRecord(&p.AltLeaves), } } diff --git a/proof/proof_test.go b/proof/proof_test.go index b91acb7ea..ef4060769 100644 --- a/proof/proof_test.go +++ b/proof/proof_test.go @@ -437,6 +437,15 @@ func genRandomGenesisWithProof(t testing.TB, assetType asset.Type, }, ) require.NoError(t, err) + + // Include 1 or more alt leaves in the anchor output Tap commitment. + // Since this is also used for generating the test vectors, we don't + // actually want to have zero alt leaves. + innerAltLeaves := asset.RandAltLeaves(t, false) + altLeaves := asset.ToAltLeaves(innerAltLeaves) + err = tapCommitment.MergeAltLeaves(altLeaves) + require.NoError(t, err) + genesisAsset := assets[0] _, commitmentProof, err := tapCommitment.Proof( genesisAsset.TapCommitmentKey(), @@ -509,6 +518,7 @@ func genRandomGenesisWithProof(t testing.TB, assetType asset.Type, AdditionalInputs: nil, GenesisReveal: genReveal, GroupKeyReveal: groupKeyReveal, + AltLeaves: altLeaves, }, genesisPrivKey } diff --git a/proof/records.go b/proof/records.go index 3d570f0ee..e1f80b961 100644 --- a/proof/records.go +++ b/proof/records.go @@ -27,6 +27,7 @@ const ( BlockHeightType tlv.Type = 22 GenesisRevealType tlv.Type = 23 GroupKeyRevealType tlv.Type = 25 + AltLeavesType tlv.Type = 27 TaprootProofOutputIndexType tlv.Type = 0 TaprootProofInternalKeyType tlv.Type = 2 @@ -53,7 +54,7 @@ var KnownProofTypes = fn.NewSet( TxMerkleProofType, AssetLeafType, InclusionProofType, ExclusionProofsType, SplitRootProofType, MetaRevealType, AdditionalInputsType, ChallengeWitnessType, BlockHeightType, - GenesisRevealType, GroupKeyRevealType, + GenesisRevealType, GroupKeyRevealType, AltLeavesType, ) // KnownTaprootProofTypes is a set of all known Taproot proof TLV types. This @@ -403,3 +404,18 @@ func GroupKeyRevealRecord(reveal *asset.GroupKeyReveal) tlv.Record { asset.GroupKeyRevealEncoder, asset.GroupKeyRevealDecoder, ) } + +func AltLeavesRecord(leaves *[]asset.AltLeaf[asset.Asset]) tlv.Record { + sizeFunc := func() uint64 { + var buf bytes.Buffer + err := asset.AltLeavesEncoder(&buf, leaves, &[8]byte{}) + if err != nil { + panic(err) + } + return uint64(len(buf.Bytes())) + } + return tlv.MakeDynamicRecord( + AltLeavesType, leaves, sizeFunc, asset.AltLeavesEncoder, + asset.AltLeavesDecoder, + ) +} diff --git a/proof/testdata/ownership-proof.hex b/proof/testdata/ownership-proof.hex index 9664458ec..9900a37fc 100644 --- a/proof/testdata/ownership-proof.hex +++ b/proof/testdata/ownership-proof.hex @@ -1 +1 @@ -5441505000040000000002244e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b2000000001045000004020519e4f58ef90f20c03981167268969f5f912258c9e241ebb3f072d4acaf433641a5b5deb3eb9840b3455592f861134f754dc1d7a053c93fb1d10535586b535e914cf6966ffff7f200000000006fd018c020000000001024e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b2001000000000000000000a1bf3e166c4ff2bc66a96d790faeabea483253f567d3443aca0f180543c6db00000000000000000003e80300000000000022512075131c90f4b84779e2de16cbcb7f330d1bd7ba27fc6027989f1ba565979d6e0ae803000000000000225120d368a69b3afee1d309c119524dc32720f00ed4eef8683236f8a8b8f57a51f557a9d0f505000000002251206cc80644acf5c9238d1beb9a693a621d042be142970c5b1d83b17294983ba631014012c896ab0645874d1f8c4686d7f3d2a5147ac80e0f38d059d465d71fac8bc0fc23f2963ac25c3e04cb1042034a3401c1163d86844b2f178ae679953433db68f40247304402205d59efe6a78355126c9c507fdd6fa608bed41760f922ae68be60ad201c11025a02200222aee2e48102a25a8581e91a6c6298a64f8efffbc6a319a0e263129f1305f90121037b23df1197e5e8a5745ad17f6f155b495c62009c1ada247533758895f31d19b50000000008220159c2fcdcefc8e854f71f1175f68687baa8f2aec6c7f916fec95c03fcf23e571d000afd02b40001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a00011f24c5895600bc6d8b0f0460f4ffc37d35d39530c8aca99449ecfaa5765fd18e0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd01660001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bad01ab01654e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b20000000013a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba02e8d229608c099e4bfea9e9861d3e2f4e4d43e9a4750b09458f26ff8953360c1903420140d64b676bfd4acbac4be655fe2e5aa00308b5b28f0eb249f42ccf738ed60f3d84067f048a0ba782d2bd35d1503af8959ae5ef8b822da04b25444e60f022674e190d283ffad0e49b5b7d302f18c8a97cdf265df22c0b648630a5642f8a04103cf36a7a00000000000004b00e0200001021024ad828457a32c78c4a3d4bb2fe0fe4d6f885bb2dc42919b6a7c7d811d82006680e020000102102599267c0f1f9c3c3824aced092d97fb56dc255a40580137d4924ca3376c29a1e0c9f0004000000010221037285f36ae2e1e52d9337ec496aaf9a56386251fcf8b40457d3e0735e484d17970374014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0df802c7000400000000022102c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c14039c017100010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba044a000188690bb0b1cffaa13b6b29bf686defe11ddc3e9798aff36eeb9509af3dc31fc30000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e00040000000202210265f90d4a24fd1d2c66d2da48b1da96d3b21222c41b1bb08b08b2a1fa2d03a29005030401010f9f000400000000022102c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c140374014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff15420140c23141fb15d0ce13e08e36951834d90bf86defbbd6e5145f503560cd21af42b2586419075f4700413336712ca87a3c376bb4bbf78646979921d84a6859d2e1f01604000001bc \ No newline at end of file +5441505000040000000002244146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b00000001045000004020f8b7cdd6f9d28ace33ce0a4065f92d7de9f4b73be10818d27f116530d316326ea8cbe7ba88ec8404872776918c153ee13d777c05c8b3da03cf4be76d8a56b12748725367ffff7f200000000006fd018c020000000001024146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b0100000000000000007a6aed31fe675df9f3cbb30ec93c6aa64c0357ee95e041b68209dd0405126ea100000000000000000003e803000000000000225120b39d40166eab936be97ba489bd3e0b804fbd3c405b6b4dd853a7ecd645c7b8c9e803000000000000225120c439941c12ce99347f4a629a938835f2cdd7cc2646da97f18c52b4f17a18b0f4a9d0f505000000002251208ea64fa1adc917b9a9f7b6f4d671faa71a3ce538e4d22f2bc7696b2228448a2801400a89ab38452e2851d9b8a8faa24078d5517588fa2c857a2b4be65c0ac56631771139a245721a0b70e75e0c33a6eec16ee1d540c00489c8321569edc4e0d3e57f02473044022053b3677ee4a83b5b64d25f6c9f6d03a6678f2daeecad0966b7f1bfcb43f86b6a022041be57f3ca6ce364e28ae4991633ba9a4198f2a8ecd4489e4e1998cd447d8ff3012102dd95677d998373268ea2e0fd1a9bdd62e74eaee0db36ae080957c8f4732448c400000000082201568673ad5cad10893ce5f16f5943297a3a5d3d0e669ea3a337a32654c7533125000afd02b400010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a000171eba4c1f1a64d5342c68cfcfce96a3332c936824f676cc047db8c79bf24f8ba0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd016600010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bad01ab01654146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b00000001898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd002e2356b87d6435363aaa7a763eeeb3818000527783c0c4ed72999a4853ef2a23b0342014062f411bf03948cb3ca8a887a6449b1b99f93458e1c2f837ec20c7759461ad433bdeb43fc3abf29cde2cb2680e3f1c7a5ac60dc5833042ed31067f80c57b285370d2894c638977dfebc6426564611a74aedddb57c7664e9278213cfcce97de38733f000000000000004b00e02000010210273567b487064507c8bb16c912e8ec608bf09f2d461a89bfe63c37a7b3fdd21fa0e020000102102550807e261f1add28272dd1dc99979f7bb0e87982c296d52d7b58fba2c1a68e40c9f0004000000010221026f8944cb3cc0e077dedfbe312cbe6071861bec5cdc055ff6fe7fe26f5a5b8357037401490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0df802c70004000000000221028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f039c01710001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0044a00014c598c9376185fd1dfb86659a5c3675bab19595cf1abf5a1cc7b7dc887d607cf0000000000000258fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e0004000000020221027e12e36f36b1b39f15cf888cc4ec443dea1f07082fb35ea2f2d170c782687e7305030401010f9f0004000000000221028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f037401490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff154201405a9d3325ceddab77bbb43583930ab428d76c89b11b3af6fe4e97daee4c4eb34422c1d8e9e67bfde1d3b1a8bfeb8ec7e458ffe0e4f8b9f2faf1ad946e43b6a9ec1604000001be \ No newline at end of file diff --git a/proof/testdata/proof-file.hex b/proof/testdata/proof-file.hex index 9784c6200..1acc5e2d1 100644 --- a/proof/testdata/proof-file.hex +++ b/proof/testdata/proof-file.hex @@ -1 +1 @@ -544150460000000003fd040a544150500004000000000224003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc90000000004500000402020180a395a53669b964bc96ec0eb1eaa7ef3e8c504c141e1d8d138563ffbfe37b51ee14543fcf58e203ef44d13897dd07e9a8de1622cd7dd87225d8deae1e35a14cf6966ffff7f200000000006f702000000000101003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc900000000000000000002e803000000000000225120fe832c770281a91714ef09391d7ecfdd3dcad62150300574b48d6d55faacde025fd5f50500000000225120e714c655906329de4e32ba6f5ba1976e0cef60196e4e8f3ba52165ec9e7e16b702483045022100a23554aa6bc76c4fd6fcd250434f7e21546acf54a0678b65a4be0f3aab54b5ad02201c9f68043649eea30696221e18948dc3cdfa301438b6842c3c6d5ab1ee615acb0121022d5d9be9be7994d8941dfe7397d6a40207b2303bfae2cc0c0651740fd8b729ae000000000822019aa5129a90c9cfed40ce04afd2338724df078ed68f3c1487a7a8367429862453000af80001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd05dc0b690167016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0200001021027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d30cc700040000000002210345a9e7176b16f12a760cee94c02ebad7560651a715829df439e858654ad60c2c039c014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001aab8488a8e9822fce155021aa404d475282ee4839bba9a981032d7e2e3d1d7d800000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0d30012e000400000001022102b0e7bde9386a96241c92086817b7299e598e633c360d396731ef73481301090205030401011113000100020e69746573742d6d657461646174611604000001b91759003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea0000000000cef1c0e4304d331b22729b545d784da6ba3ae27b1bf2b6a885b5f9fd51939671fd07825441505000040000000002245d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc0000000004500000402094d89fbb1aef5f911d49bf392e8d253fe2f8587f782895b5a3ba2ef81d48d43afc2afadae1d1623b4f760c6d6a0d15d40ea08288dba130b7d4ccc20f29fa52d714cf6966ffff7f200200000006fd018c020000000001025d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc00000000000000000002ea532b7f6f10d7ef5878d4bdae9c96a8c966fbefa0efc5dfd4034c59791f5b00000000000000000003e80300000000000022512080f7611a166819aab42e0b797b236863212bf398af3be7849294d4552d415005e803000000000000225120f0f9a8294653152502b69b2cc9ca54bf673a54ea03e4c9c778b5f984d7d8afdca9d0f505000000002251207e1c0ef01b3c3f9eb31c48f50d93de832127a2ef9c4e3088a9815da1d2e11e780140ebda6810d4ca9d220f567fe311fee267c4ed4fb1d7557e0267adb464a20eb4d01a41d9b20cb5a3f3e16065868f4139b9a682b9fcc52d64395166549e12308aa902473044022078d102f8005037362c1979c10e7c3e26b4190f4e2fda4eb596ef812be9798a00022059033397057c166563ef31eb2020eef0db9a371f8184c153e15411cfd7a1f817012102aa22f29c13156c03e4dfba265716673c69942b866b50641e3268c58067eba7ec00000000082201ba38ebaed302847c3449eaa220ef93585c14665a708a9767934e74ccbc388d39000afd02b40001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd04b00bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a00010be395fda464eddb62c4d473d9cb4acf0e76def5656efcac738fe6c7e04cceb1000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd01660001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd012c0bad01ab01655d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc000000003a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d303420140f40bdbc3d79e080ba95d04f8bdb785a28e8801705bb332dd5914ba683c401a9c25aa8851e4487e7f4b6d57e782542183b6622e1ee3d5953bbcb6d99e34ebb3e50d286f81441e4f801c3886d26f242f2c73ead3f5a3793b3d6fe25611e0fad4ff2d7000000000000005dc0e0200001021025bb648c78867c438cc7e8ce4793f74faf242fcbf668bf337fe04c637f60d50750e020000102102e8d229608c099e4bfea9e9861d3e2f4e4d43e9a4750b09458f26ff8953360c190c9f000400000001022102559473084f585d68da4381097d03c017d4dbf20de346d5afc3922f30529f64bf0374014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0dfd012002ef0004000000000221037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da03c4017100010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba044a0001f83c821ff57a84513a93118f5220aee193be9a7f1797296bd59e640807ff7fe8000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f024f000102024a000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f2e0004000000020221022fd7f0a1c0f430c25bd80f5b4a8b6046aa3c2a903568f766c8b0f503306fe07905030401010fc70004000000000221037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da039c014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f1604000001ba1b390a48fbb43ccad683fe9ff65e293d399e7acaa16c7af1a94e1602d36cbdbcfd07305441505000040000000002244e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b2000000001045000004020519e4f58ef90f20c03981167268969f5f912258c9e241ebb3f072d4acaf433641a5b5deb3eb9840b3455592f861134f754dc1d7a053c93fb1d10535586b535e914cf6966ffff7f200000000006fd018c020000000001024e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b2001000000000000000000a1bf3e166c4ff2bc66a96d790faeabea483253f567d3443aca0f180543c6db00000000000000000003e80300000000000022512075131c90f4b84779e2de16cbcb7f330d1bd7ba27fc6027989f1ba565979d6e0ae803000000000000225120d368a69b3afee1d309c119524dc32720f00ed4eef8683236f8a8b8f57a51f557a9d0f505000000002251206cc80644acf5c9238d1beb9a693a621d042be142970c5b1d83b17294983ba631014012c896ab0645874d1f8c4686d7f3d2a5147ac80e0f38d059d465d71fac8bc0fc23f2963ac25c3e04cb1042034a3401c1163d86844b2f178ae679953433db68f40247304402205d59efe6a78355126c9c507fdd6fa608bed41760f922ae68be60ad201c11025a02200222aee2e48102a25a8581e91a6c6298a64f8efffbc6a319a0e263129f1305f90121037b23df1197e5e8a5745ad17f6f155b495c62009c1ada247533758895f31d19b50000000008220159c2fcdcefc8e854f71f1175f68687baa8f2aec6c7f916fec95c03fcf23e571d000afd02b40001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a00011f24c5895600bc6d8b0f0460f4ffc37d35d39530c8aca99449ecfaa5765fd18e0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd01660001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bad01ab01654e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b20000000013a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba02e8d229608c099e4bfea9e9861d3e2f4e4d43e9a4750b09458f26ff8953360c1903420140d64b676bfd4acbac4be655fe2e5aa00308b5b28f0eb249f42ccf738ed60f3d84067f048a0ba782d2bd35d1503af8959ae5ef8b822da04b25444e60f022674e190d283ffad0e49b5b7d302f18c8a97cdf265df22c0b648630a5642f8a04103cf36a7a00000000000004b00e0200001021024ad828457a32c78c4a3d4bb2fe0fe4d6f885bb2dc42919b6a7c7d811d82006680e020000102102599267c0f1f9c3c3824aced092d97fb56dc255a40580137d4924ca3376c29a1e0c9f0004000000010221037285f36ae2e1e52d9337ec496aaf9a56386251fcf8b40457d3e0735e484d17970374014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0df802c7000400000000022102c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c14039c017100010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba044a000188690bb0b1cffaa13b6b29bf686defe11ddc3e9798aff36eeb9509af3dc31fc30000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e00040000000202210265f90d4a24fd1d2c66d2da48b1da96d3b21222c41b1bb08b08b2a1fa2d03a29005030401010f9f000400000000022102c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c140374014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1604000001bceace7ac66ee96ec0af116afe107378c3feb5f8da2836d238e654e3f1c36d349f \ No newline at end of file +544150460000000003fd04095441505000040000000002240028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000450000040209a8faa84e2081e2407752e522ac9f156d01343a32cb404dd305c33fdd5e1353b9920869feb397a0b595e5055e617e641d608e88ac1ecb600d469f9262cd823bd47725367ffff7f200000000006f6020000000001010028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e4700000000000000000002e8030000000000002251201de5c42c8a8b746e8546333f77af17351aacab80ad69bccb38c80bce6e9b8bef5fd5f5050000000022512007138e14f350280a1d8ddee3269e63475c460ec569f92c4e0a8d4699bf41f4bb0247304402204f36d4142a0766b659ad3de205cd6f6b2ff9799d2ba9678150a3d1dbfc81d2f602201ea43dbfa55ab6d603b89aae66751b3c0c858d0b1982bd38403b29d95bdfdb1a0121022a00c959d98510b311dec09ad2214f1267edfdea434a491d33f837192617c364000000000822017663b78cc1cce4f4ed4025d08d9b168348af2cf162f4daf664b47d875a068b39000af800010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd05dc0b690167016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0200001021025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c0cc700040000000002210352a78f4268168a1219a30bb96ce37e5a73d6175a336947fa7376661667805e0a039c01490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001076553d07d1e80b22b6852656e98b3f090db89de729e0389bdd654050635ae4500000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf0d30012e000400000001022102773d842605766a0803e2ac601310b43cd2acbecd951a4910a915e8943e53ecb505030401011113000100020e69746573742d6d657461646174611604000001bb17590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea000000000020332d7f9570213f0eaee3ef0117ef150993418974949e16be8fb97050ba91aafd07825441505000040000000002244cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b00000000045000004020db037715a922e92846f09ce5db1842bd2e129cc887bbc3528e4e03deddb9d64de82bf7ef1762fe1e02548783fe4675636fbe6e76ac92535d3fd4a8fceefa36d447725367ffff7f200100000006fd018c020000000001024cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b000000000000000000062736a1f2dbc0332040eafe375e4922ace3da94f88ada2ce397e7914014a32500000000000000000003e8030000000000002251203efafc563c1ffb16afc844abe35e48ea0303bf8b03753c640da1924f81b79408e8030000000000002251208eb3db333954f26aa1eacd5f057b60a32c59987e0226b58dc8debb033bdee3e6a9d0f50500000000225120f09fc5609b3c82f778d27fe3f8e9b88a10edcebc7c35864940049991bf4445650140b4622c62287ae87d96fffa7fd34f58708b0d1e6f4ae5a85fc6705781dd92711129d9cd0e3774fdb0fa048d3bbc559dd3d8d76b84d56928025ef24ba0b1940a7d02473044022006229b6e9c59a1c5d68ced672808f075382b3b5c5bf44eb1c9e993593d4807c102206667b3a902f71aab2ddbaafe2cef32f1bde17da6522444e87fe1fd50d5aa90f20121025d3b26142dcb90504cbfbbbf70d92fc7579198ffe9bf497a3bf2c55df892512600000000082201da05c3e7425eaccaf6bbd57fd73b12f5cd84c17807ba58b9570a5a53aa73eec2000afd02b400010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd04b00bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a00019f433ee26a1e6288bce58cbd0d77858201e55803f967db9e746197d059b1c422000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffd016600010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd012c0bad01ab01654cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b00000000898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c03420140db1a68629f9408fd95e5dbd819380435bbad52c66746baabcc037ef6076cf215ecab264159bbbd922ae57a4890599f657dacc5a09d56785f08f7adad54e974d10d28c96ba1c3534f04149b2480923fc13d0e55e5251c01610317d48e1f0e7b9d219500000000000005dc0e020000102102adc1cf482226b3c4d0fac399e97302f4d7260f4ba782cd9cfbdb3c7ce94cd1e40e020000102102e2356b87d6435363aaa7a763eeeb3818000527783c0c4ed72999a4853ef2a23b0c9f000400000001022103687c05eb0dade4141769314d1fe89ac712b1c6de66a228110189bd3b278f0fe9037401490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0dfd012002ef000400000000022103f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a03c401710001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0044a00016201f1a088494f6a5b061a15c62c509b5a9f412bc067f6bb279c5597ea97cecf000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf024f000102024a0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf2e0004000000020221026019f70d187fdb882da16113e08014f667d05980997df3abd39bb322801b834b05030401010fc7000400000000022103f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a039c01490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf1604000001bca18b7515459f1db78d6285670ea55408f45c81effd6f3f6e62a72c316b191757fd07305441505000040000000002244146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b00000001045000004020f8b7cdd6f9d28ace33ce0a4065f92d7de9f4b73be10818d27f116530d316326ea8cbe7ba88ec8404872776918c153ee13d777c05c8b3da03cf4be76d8a56b12748725367ffff7f200000000006fd018c020000000001024146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b0100000000000000007a6aed31fe675df9f3cbb30ec93c6aa64c0357ee95e041b68209dd0405126ea100000000000000000003e803000000000000225120b39d40166eab936be97ba489bd3e0b804fbd3c405b6b4dd853a7ecd645c7b8c9e803000000000000225120c439941c12ce99347f4a629a938835f2cdd7cc2646da97f18c52b4f17a18b0f4a9d0f505000000002251208ea64fa1adc917b9a9f7b6f4d671faa71a3ce538e4d22f2bc7696b2228448a2801400a89ab38452e2851d9b8a8faa24078d5517588fa2c857a2b4be65c0ac56631771139a245721a0b70e75e0c33a6eec16ee1d540c00489c8321569edc4e0d3e57f02473044022053b3677ee4a83b5b64d25f6c9f6d03a6678f2daeecad0966b7f1bfcb43f86b6a022041be57f3ca6ce364e28ae4991633ba9a4198f2a8ecd4489e4e1998cd447d8ff3012102dd95677d998373268ea2e0fd1a9bdd62e74eaee0db36ae080957c8f4732448c400000000082201568673ad5cad10893ce5f16f5943297a3a5d3d0e669ea3a337a32654c7533125000afd02b400010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a000171eba4c1f1a64d5342c68cfcfce96a3332c936824f676cc047db8c79bf24f8ba0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd016600010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bad01ab01654146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b00000001898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd002e2356b87d6435363aaa7a763eeeb3818000527783c0c4ed72999a4853ef2a23b0342014062f411bf03948cb3ca8a887a6449b1b99f93458e1c2f837ec20c7759461ad433bdeb43fc3abf29cde2cb2680e3f1c7a5ac60dc5833042ed31067f80c57b285370d2894c638977dfebc6426564611a74aedddb57c7664e9278213cfcce97de38733f000000000000004b00e02000010210273567b487064507c8bb16c912e8ec608bf09f2d461a89bfe63c37a7b3fdd21fa0e020000102102550807e261f1add28272dd1dc99979f7bb0e87982c296d52d7b58fba2c1a68e40c9f0004000000010221026f8944cb3cc0e077dedfbe312cbe6071861bec5cdc055ff6fe7fe26f5a5b8357037401490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0df802c70004000000000221028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f039c01710001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0044a00014c598c9376185fd1dfb86659a5c3675bab19595cf1abf5a1cc7b7dc887d607cf0000000000000258fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e0004000000020221027e12e36f36b1b39f15cf888cc4ec443dea1f07082fb35ea2f2d170c782687e7305030401010f9f0004000000000221028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f037401490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1604000001be41fe827f500d461fb8dc9853f215d2b035fd961b7a4b6c0cd63cdbd58b0c721a \ No newline at end of file diff --git a/proof/testdata/proof.hex b/proof/testdata/proof.hex index b543b536f..bc97c1b78 100644 --- a/proof/testdata/proof.hex +++ b/proof/testdata/proof.hex @@ -1 +1 @@ -5441505000040000000002245d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc000000000450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096e88000000000000000006fd018c020000000001025d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc00000000000000000002ea532b7f6f10d7ef5878d4bdae9c96a8c966fbefa0efc5dfd4034c59791f5b00000000000000000003e80300000000000022512080f7611a166819aab42e0b797b236863212bf398af3be7849294d4552d415005e803000000000000225120f0f9a8294653152502b69b2cc9ca54bf673a54ea03e4c9c778b5f984d7d8afdca9d0f505000000002251207e1c0ef01b3c3f9eb31c48f50d93de832127a2ef9c4e3088a9815da1d2e11e780140ebda6810d4ca9d220f567fe311fee267c4ed4fb1d7557e0267adb464a20eb4d01a41d9b20cb5a3f3e16065868f4139b9a682b9fcc52d64395166549e12308aa902473044022078d102f8005037362c1979c10e7c3e26b4190f4e2fda4eb596ef812be9798a00022059033397057c166563ef31eb2020eef0db9a371f8184c153e15411cfd7a1f817012102aa22f29c13156c03e4dfba265716673c69942b866b50641e3268c58067eba7ec000000000801000afd01660001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd012c0bad01ab01655d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc000000003a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d303420140f40bdbc3d79e080ba95d04f8bdb785a28e8801705bb332dd5914ba683c401a9c25aa8851e4487e7f4b6d57e782542183b6622e1ee3d5953bbcb6d99e34ebb3e50d286f81441e4f801c3886d26f242f2c73ead3f5a3793b3d6fe25611e0fad4ff2d7000000000000005dc0e0200001021025bb648c78867c438cc7e8ce4793f74faf242fcbf668bf337fe04c637f60d50750cc70004000000000221037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da039c014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0df802c7000400000001022102559473084f585d68da4381097d03c017d4dbf20de346d5afc3922f30529f64bf039c017100010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba044a0001d095e70612084951016728e9ebaddfd4e3765281640f57b313603e91672af73500000000000004b0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e0004000000020221022fd7f0a1c0f430c25bd80f5b4a8b6046aa3c2a903568f766c8b0f503306fe0790503040101160400000000 \ No newline at end of file +5441505000040000000002244cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b000000000450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096e88000000000000000006fd018c020000000001024cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b000000000000000000062736a1f2dbc0332040eafe375e4922ace3da94f88ada2ce397e7914014a32500000000000000000003e8030000000000002251203efafc563c1ffb16afc844abe35e48ea0303bf8b03753c640da1924f81b79408e8030000000000002251208eb3db333954f26aa1eacd5f057b60a32c59987e0226b58dc8debb033bdee3e6a9d0f50500000000225120f09fc5609b3c82f778d27fe3f8e9b88a10edcebc7c35864940049991bf4445650140b4622c62287ae87d96fffa7fd34f58708b0d1e6f4ae5a85fc6705781dd92711129d9cd0e3774fdb0fa048d3bbc559dd3d8d76b84d56928025ef24ba0b1940a7d02473044022006229b6e9c59a1c5d68ced672808f075382b3b5c5bf44eb1c9e993593d4807c102206667b3a902f71aab2ddbaafe2cef32f1bde17da6522444e87fe1fd50d5aa90f20121025d3b26142dcb90504cbfbbbf70d92fc7579198ffe9bf497a3bf2c55df8925126000000000801000afd016600010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd012c0bad01ab01654cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b00000000898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c03420140db1a68629f9408fd95e5dbd819380435bbad52c66746baabcc037ef6076cf215ecab264159bbbd922ae57a4890599f657dacc5a09d56785f08f7adad54e974d10d28c96ba1c3534f04149b2480923fc13d0e55e5251c01610317d48e1f0e7b9d219500000000000005dc0e020000102102adc1cf482226b3c4d0fac399e97302f4d7260f4ba782cd9cfbdb3c7ce94cd1e40cc7000400000000022103f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a039c01490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf0df802c7000400000001022103687c05eb0dade4141769314d1fe89ac712b1c6de66a228110189bd3b278f0fe9039c01710001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0044a0001b44d27361609c463ec20dfa02d1fd2c489254ad82c6385ea29521553f1754b4600000000000004b0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e0004000000020221026019f70d187fdb882da16113e08014f667d05980997df3abd39bb322801b834b0503040101160400000000 \ No newline at end of file diff --git a/proof/testdata/proof_tlv_encoding_generated.json b/proof/testdata/proof_tlv_encoding_generated.json index ef301744f..5ce565913 100644 --- a/proof/testdata/proof_tlv_encoding_generated.json +++ b/proof/testdata/proof_tlv_encoding_generated.json @@ -6,13 +6,13 @@ "block_header": { "version": 0, "prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "merkle_root": "7311573af55a2188d0aaa71e32747b3649351789fa5ead68d81ef46d56abead7", - "timestamp": 3319190120, + "merkle_root": "99214a11efab18f32f6f63b5174f622c844fa916cf08c58c34ecbf769a0dead1", + "timestamp": 3197016449, "bits": 0, "nonce": 0 }, "block_height": 1, - "anchor_tx": "02000000015fb9d95526a41a9504680b4e7c8b763a1b1d49d4955c8486216325253fec738d0badb37c0000000000014a01000000000000225120e9a3716b34c9e09616df6b0a97f65ed504231a78cd754db131cabc93137c139700000000", + "anchor_tx": "02000000015fb9d95526a41a9504680b4e7c8b763a1b1d49d4955c8486216325253fec738d0badb37c0000000000014a01000000000000225120bf073c44fdc2a5d41b82e3f80f0dfe1db627e7e67354529db7aed5ef1a42cee000000000", "tx_merkle_proof": { "nodes": [], "bits": [] @@ -60,7 +60,7 @@ "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "proof": "000134fdab1a49c1bc9c20feaa3d7da14feb0beb570233d2991f474d1074564823d80000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf", "version": 2, "unknown_odd_types": null }, @@ -88,32 +88,110 @@ "raw_key": "03133c4a2dd92ef1f92fe3bd78e080dcb50e03057acdecf0365143b69687f7ea3a", "tapscript_root": "" }, + "alt_leaves": [ + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": null, + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 55275, + "script_key": "022bfbf68116009c25e04083f2eff77f9dad8174f6700f47a4a09572c1a5ee1d10", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "79db19444bec40f84c89", + "2b9bffd43629b0223bee", + "a5f4f74391f445d15afd" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 36796, + "script_key": "0207a58f8e020bca1134293836ee10babb252ba4a0db45f6b531a38517b61e34da", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "86b14323a66f5b3af6de", + "0374366c4719e43a1b06" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 39464, + "script_key": "02e69b356fbfbd4184d61e6f1d8ec56cb5f6d1fb546d436cab48cbef3096fbbdef", + "group_key": null, + "unknown_odd_types": null + } + ], "unknown_odd_types": null }, - "expected": "5441505000040000000002245fb9d95526a41a9504680b4e7c8b763a1b1d49d4955c8486216325253fec738d7cb3ad0b0450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000d7eaab566df41ed868ad5efa89173549367b74321ea7aad088215af53a57117368d2d6c50000000000000000065e02000000015fb9d95526a41a9504680b4e7c8b763a1b1d49d4955c8486216325253fec738d0badb37c0000000000014a01000000000000225120e9a3716b34c9e09616df6b0a97f65ed504231a78cd754db131cabc93137c1397000000000801000afd018e000100028a5fb9d95526a41a9504680b4e7c8b763a1b1d49d4955c8486216325253fec738d7cb3ad0b4065623964313861343437383430343564383766336336376366323237343665393935616635613235333637393531626161326666366364343731633438336631000000000000000000000000000000000000000000000000000000000000000000000000010401010601010bad01ab016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342014053ea5b01fa1e442fbbe8b1aa94726be4e9972d0b09f6ceaaae6f412aaae205b4d932a783aa56c063249888e6a5f1386c81db2222384a6a18748693a9110ebc5a0e02000010210250fb435f8fc76fc75736ac89956406e882a468e929da69ca596a716ebcfa8516112102a9d7d88008817398f9d8b47f6b954139f23f3cb235eaa701395fb0efa6e11ccd0c9f0004000000000221024a821d5ec008712983929de448b8afb6c24e5a1b97367b9a65b6220d7f083fe30374014900010002201624d9703a0fea948dd97385753c57c8225b9421af0ec87d4c92a4832a01b03c04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160400000001178a5fb9d95526a41a9504680b4e7c8b763a1b1d49d4955c8486216325253fec738d7cb3ad0b406562396431386134343738343034356438376633633637636632323734366539393561663561323533363739353162616132666636636434373163343833663100000000000000000000000000000000000000000000000000000000000000000000000001192103133c4a2dd92ef1f92fe3bd78e080dcb50e03057acdecf0365143b69687f7ea3a", + "expected": "5441505000040000000002245fb9d95526a41a9504680b4e7c8b763a1b1d49d4955c8486216325253fec738d7cb3ad0b0450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000d1ea0d9a76bfec348cc508cf16a94f842c624f17b5636f2ff318abef114a219981998ebe0000000000000000065e02000000015fb9d95526a41a9504680b4e7c8b763a1b1d49d4955c8486216325253fec738d0badb37c0000000000014a01000000000000225120bf073c44fdc2a5d41b82e3f80f0dfe1db627e7e67354529db7aed5ef1a42cee0000000000801000afd018e000100028a5fb9d95526a41a9504680b4e7c8b763a1b1d49d4955c8486216325253fec738d7cb3ad0b4065623964313861343437383430343564383766336336376366323237343665393935616635613235333637393531626161326666366364343731633438336631000000000000000000000000000000000000000000000000000000000000000000000000010401010601010bad01ab016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342014053ea5b01fa1e442fbbe8b1aa94726be4e9972d0b09f6ceaaae6f412aaae205b4d932a783aa56c063249888e6a5f1386c81db2222384a6a18748693a9110ebc5a0e02000010210250fb435f8fc76fc75736ac89956406e882a468e929da69ca596a716ebcfa8516112102a9d7d88008817398f9d8b47f6b954139f23f3cb235eaa701395fb0efa6e11ccd0cc70004000000000221024a821d5ec008712983929de448b8afb6c24e5a1b97367b9a65b6220d7f083fe3039c014900010002201624d9703a0fea948dd97385753c57c8225b9421af0ec87d4c92a4832a01b03c04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a000134fdab1a49c1bc9c20feaa3d7da14feb0beb570233d2991f474d1074564823d80000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf160400000001178a5fb9d95526a41a9504680b4e7c8b763a1b1d49d4955c8486216325253fec738d7cb3ad0b406562396431386134343738343034356438376633633637636632323734366539393561663561323533363739353162616132666636636434373163343833663100000000000000000000000000000000000000000000000000000000000000000000000001192103133c4a2dd92ef1f92fe3bd78e080dcb50e03057acdecf0365143b69687f7ea3a1bc2032b0b0201000e02d7eb1021022bfbf68116009c25e04083f2eff77f9dad8174f6700f47a4a09572c1a5ee1d104f0b2601240322030a79db19444bec40f84c890a2b9bffd43629b0223bee0aa5f4f74391f445d15afd0e028fbc10210207a58f8e020bca1134293836ee10babb252ba4a0db45f6b531a38517b61e34da440b1b01190317020a86b14323a66f5b3af6de0a0374366c4719e43a1b060e029a28102102e69b356fbfbd4184d61e6f1d8ec56cb5f6d1fb546d436cab48cbef3096fbbdef", "comment": "collectible genesis" }, { "proof": { - "prev_out": "91018d7c2d968d3f71f8cb984b92f67403049442fd5ad145f49143f7f4a5ee3b:919928731", + "prev_out": "0143a64d8e9fa5ead0bd613082c233f007d0a1e9406aec9dd467a4af63e58d78:3850586288", "block_header": { "version": 0, "prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "merkle_root": "0ce9de0b1aa4d4b2e3b968b97d5751d13a2bb12a6f3cb79bc06d0559e3e581a2", - "timestamp": 379089909, + "merkle_root": "506ccfed8ee985dc49784586bc3bb0493789506f4c76cb64ca917a5ad9b2f9f3", + "timestamp": 4194067816, "bits": 0, "nonce": 0 }, "block_height": 1, - "anchor_tx": "02000000013beea5f4f74391f445d15afd4294040374f6924b98cbf8713f8d962d7c8d01919bffd4360000000000014a01000000000000225120d6f158dcdb4ae2d8e7a69e1cfea786a3e259ed6a9f080e77eacc8b50bee364f100000000", + "anchor_tx": "0200000001788de563afa467d49dec6a40e9a1d007f033c2823061bdd0eaa59f8e4da64301b04883e50000000000014a010000000000002251202074789c10c125c9c88410e886ee8a77943955f973f639780d556fff37496ae600000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 1, - "genesis_first_prev_out": "91018d7c2d968d3f71f8cb984b92f67403049442fd5ad145f49143f7f4a5ee3b:919928731", - "genesis_tag": "a1786f9fff094279db1944ebd7a19d0f7bbacbe0255aa5b7d44bec40f84c892b", + "genesis_first_prev_out": "0143a64d8e9fa5ead0bd613082c233f007d0a1e9406aec9dd467a4af63e58d78:3850586288", + "genesis_tag": "4f24abf7df866baa56038367ad6145de1ee8f4a8b0993ebdf8883a0ad8be9c39", "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "genesis_output_index": 0, "genesis_type": 1, @@ -128,33 +206,33 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "abdf7912ca1115796ca379342a8a44688b367da67c1538de0900518122552cd2582511fe2519ef59852dfd29b847fb0dd4469dff9dc76f23b26b5bc4b6595e30" + "4268a7673cab6bbc4f98083cb05e9737dac39d01eb10c2bfdbff714164444be4d8d87fb0fc96a68f49c15d3978671e1a749ee1ab6fb13dcedab955ee2e98f284" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02e32f37674363fa839138f01b1c927aa41ddb89a7f8ecab958e98dd5761eb1c21", + "script_key": "020a2f0305d6396d5b980f8a90968ff9608347db9a6c838ea747d00e3c0d55aca2", "group_key": { - "group_key": "02e948544ffc218642d218d427315670dc792f166310fbf8ecbd79eb23415c64d6" + "group_key": "02a5efb5ae574f59ec0e690cdd327aa44baab82a17289db69bcc59d2859df87fa8" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "025754874182281eb486456556924808829f747135f8bd18093365a1a76bd781ca", + "internal_key": "02c19b367e77dd4caf9c87c5837e335621efcb40d5922f04dd44e895deec26f61f", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 1, - "tap_key": "abc5f2746b9a040498a9cf1c81cd8f09f030e9e411afdc256b2751e0998421c5", + "tap_key": "03f8741876cf5404d72e167279794d8973c4b37ff5fe240c6bf613c59972251a", "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 1, + "proof": "0001a38de88bd8517fa2ea31472f7816563fccacb80a4cb41a84f5c69dbcf58e4edd0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "version": 2, "unknown_odd_types": null }, "unknown_odd_types": null @@ -171,42 +249,69 @@ "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "91018d7c2d968d3f71f8cb984b92f67403049442fd5ad145f49143f7f4a5ee3b:919928731", - "tag": "a1786f9fff094279db1944ebd7a19d0f7bbacbe0255aa5b7d44bec40f84c892b", + "first_prev_out": "0143a64d8e9fa5ead0bd613082c233f007d0a1e9406aec9dd467a4af63e58d78:3850586288", + "tag": "4f24abf7df866baa56038367ad6145de1ee8f4a8b0993ebdf8883a0ad8be9c39", "meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "output_index": 0, "type": 1 }, "group_key_reveal": { - "raw_key": "025223d79d2704282a79b778ccd27bd5bb35d15cf0d705db4167057c012a56e8e4", + "raw_key": "0386fa72092ee725519c03fd777883047a270234ac2a06a3600f703b0fc7539edb", "tapscript_root": "" }, + "alt_leaves": [ + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "4b39f32b7c7822ba64f8" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 22527, + "script_key": "02f47f32fa2319ddd2e36b5b0a5a2d1ab70178a3e83e43925ff94beeefe021a763", + "group_key": null, + "unknown_odd_types": null + } + ], "unknown_odd_types": null }, - "expected": "5441505000040000000002243beea5f4f74391f445d15afd4294040374f6924b98cbf8713f8d962d7c8d019136d4ff9b0450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000a281e5e359056dc09bb73c6f2ab12b3ad151577db968b9e3b2d4a41a0bdee90cf57398160000000000000000065e02000000013beea5f4f74391f445d15afd4294040374f6924b98cbf8713f8d962d7c8d01919bffd4360000000000014a01000000000000225120d6f158dcdb4ae2d8e7a69e1cfea786a3e259ed6a9f080e77eacc8b50bee364f1000000000801000afd018e000101028a3beea5f4f74391f445d15afd4294040374f6924b98cbf8713f8d962d7c8d019136d4ff9b4061313738366639666666303934323739646231393434656264376131396430663762626163626530323535616135623764343462656334306638346338393262000000000000000000000000000000000000000000000000000000000000000000000000010401010601010bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140abdf7912ca1115796ca379342a8a44688b367da67c1538de0900518122552cd2582511fe2519ef59852dfd29b847fb0dd4469dff9dc76f23b26b5bc4b6595e300e020000102102e32f37674363fa839138f01b1c927aa41ddb89a7f8ecab958e98dd5761eb1c21112102e948544ffc218642d218d427315670dc792f166310fbf8ecbd79eb23415c64d60c9f0004000000000221025754874182281eb486456556924808829f747135f8bd18093365a1a76bd781ca037401490001010220abc5f2746b9a040498a9cf1c81cd8f09f030e9e411afdc256b2751e0998421c504220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010102220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160400000001178a3beea5f4f74391f445d15afd4294040374f6924b98cbf8713f8d962d7c8d019136d4ff9b4061313738366639666666303934323739646231393434656264376131396430663762626163626530323535616135623764343462656334306638346338393262000000000000000000000000000000000000000000000000000000000000000000000000011921025223d79d2704282a79b778ccd27bd5bb35d15cf0d705db4167057c012a56e8e4", + "expected": "544150500004000000000224788de563afa467d49dec6a40e9a1d007f033c2823061bdd0eaa59f8e4da64301e58348b00450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000f3f9b2d95a7a91ca64cb764c6f50893749b03bbc86457849dc85e98eedcf6c506865fcf90000000000000000065e0200000001788de563afa467d49dec6a40e9a1d007f033c2823061bdd0eaa59f8e4da64301b04883e50000000000014a010000000000002251202074789c10c125c9c88410e886ee8a77943955f973f639780d556fff37496ae6000000000801000afd018e000101028a788de563afa467d49dec6a40e9a1d007f033c2823061bdd0eaa59f8e4da64301e58348b04034663234616266376466383636626161353630333833363761643631343564653165653866346138623039393365626466383838336130616438626539633339000000000000000000000000000000000000000000000000000000000000000000000000010401010601010bad01ab01650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034201404268a7673cab6bbc4f98083cb05e9737dac39d01eb10c2bfdbff714164444be4d8d87fb0fc96a68f49c15d3978671e1a749ee1ab6fb13dcedab955ee2e98f2840e0200001021020a2f0305d6396d5b980f8a90968ff9608347db9a6c838ea747d00e3c0d55aca2112102a5efb5ae574f59ec0e690cdd327aa44baab82a17289db69bcc59d2859df87fa80cc7000400000000022102c19b367e77dd4caf9c87c5837e335621efcb40d5922f04dd44e895deec26f61f039c0149000101022003f8741876cf5404d72e167279794d8973c4b37ff5fe240c6bf613c59972251a04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001a38de88bd8517fa2ea31472f7816563fccacb80a4cb41a84f5c69dbcf58e4edd0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f160400000001178a788de563afa467d49dec6a40e9a1d007f033c2823061bdd0eaa59f8e4da64301e58348b040346632346162663764663836366261613536303338333637616436313435646531656538663461386230393933656264663838383361306164386265396333390000000000000000000000000000000000000000000000000000000000000000000000000119210386fa72092ee725519c03fd777883047a270234ac2a06a3600f703b0fc7539edb1b3b01390b10010e030c010a4b39f32b7c7822ba64f80e0257ff102102f47f32fa2319ddd2e36b5b0a5a2d1ab70178a3e83e43925ff94beeefe021a763", "comment": "collectible genesis v1 asset version" }, { "proof": { - "prev_out": "399cbed80a3a88f8bd3e99b0a8f4e81ede4561ad67830356aa6b86e9f7676678:609209654", + "prev_out": "41fe3dea7985757ea7ed5d9702a18da250bf343970a329ec300c925507c051e1:129447512", "block_header": { "version": 0, "prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "merkle_root": "814b4f0a997bf3e2efe82251eb2a8159e5818eaf460bba16e52225980a0211d3", - "timestamp": 916048627, + "merkle_root": "9915116f9113ddda58da71798ca3e890bdf8102e1444c11962228a51a3ae7d62", + "timestamp": 4083171628, "bits": 0, "nonce": 0 }, "block_height": 1, - "anchor_tx": "0200000001786667f7e9866baa56038367ad6145de1ee8f4a8b0993ebdf8883a0ad8be9c3936cd4f240000000000014a01000000000000225120c125e525e43647345b296eb2f150095b7de9855a051351c61a4d4a4093e0c11e00000000", + "anchor_tx": "0200000001e151c00755920c30ec29a3703934bf50a28da102975deda77e758579ea3dfe415836b7070000000000014a010000000000002251204cad16f67e2e3709041efe3b0f5b8dcad1a039d5794555b98a43cee0977a420400000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 0, - "genesis_first_prev_out": "399cbed80a3a88f8bd3e99b0a8f4e81ede4561ad67830356aa6b86e9f7676678:609209654", - "genesis_tag": "647981998ebea89c0b4b373970115e82ed6f4125c8fa7311e4d7defa922daae7", + "genesis_first_prev_out": "41fe3dea7985757ea7ed5d9702a18da250bf343970a329ec300c925507c051e1:129447512", + "genesis_tag": "be8fb56987c77f5818526f1814be823350eab13935f31d84484517e924aef78a", "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "genesis_output_index": 0, "genesis_type": 1, @@ -221,32 +326,32 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "d4c9dacc67cc7eea8fb0fdb25aeb0eaebfe7e64f9452481f39d4521caa03d5e51816e9be7a1eab4f55cfc4c5c830d1edd2d0bb8b7e22176a80705e4a4b74b9fe" + "abdc1c6834228d35712c519d7bd30976596e8524c46366ef738198ed3d97a19de1d3f183356690f304bf336c8277117654d491bbef898ef9362dd7d85f8a6a9e" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02a949978365263a166a737ed35347b41112a91680df47a702bfdaf08bab17a0bb", + "script_key": "02e7a6fd063ffaef05e4478bed272911e6988c4583d9f3aed0edd7c9b38a1b6b80", "group_key": { - "group_key": "033726c2dea09255208270be3c1593276fa894078141ee7d223539e90621ab0615" + "group_key": "035554e4818d4e6a394ea36a2c3153fec3ac286ce633bb236eb37535a12e18e757" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "02ec63ba5f6bc18f393e68e3138ebf9ed421b4054a918337fa2f580a1baea02e19", + "internal_key": "023ba17278e68c2aaa1d66cff879d4a76296040e4647ef2ff91c86e3c017552d9c", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "9f31cea8764981eb043c2a5dac3381e47bacd224c5d53de80eb0b3f921ac7839", + "tap_key": "78f571bbf9df60ceebad3702600f9cb4f8aabe4a05db4a6661c80ccf2411ea7a", "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "proof": "000198af7ab6d8359228c79484934a597447e6d274783e3fce101f18bed16ef19afb0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", "version": 2, "unknown_odd_types": null }, @@ -264,42 +369,100 @@ "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "399cbed80a3a88f8bd3e99b0a8f4e81ede4561ad67830356aa6b86e9f7676678:609209654", - "tag": "647981998ebea89c0b4b373970115e82ed6f4125c8fa7311e4d7defa922daae7", + "first_prev_out": "41fe3dea7985757ea7ed5d9702a18da250bf343970a329ec300c925507c051e1:129447512", + "tag": "be8fb56987c77f5818526f1814be823350eab13935f31d84484517e924aef78a", "meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "output_index": 0, "type": 1 }, "group_key_reveal": { - "raw_key": "022f9d9a2a6190dca7ea724b72150d6f217026c1637f4af3847252259a73f38d8f", + "raw_key": "02e3f526ff5372a961c158ac871ad6ee1b416750fdf2923ca193ffaf648d97e563", "tapscript_root": "" }, + "alt_leaves": [ + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "406b32d6109c9b14678a", + "274f01a910ae295f6efb", + "fe5f5abf44ccde263b56", + "06633e2bf0006f28295d" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 22021, + "script_key": "024beed7feee46e63c491d32562fa9b0adda1a0ae6637014d49225d795b92f1134", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "76b062901a52720da85c", + "a1e4b38eaf3f44c6c6ef", + "8362f2f54fc00e09d6fc", + "25640854c15dfcacaa8a" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 12039, + "script_key": "023dc0016731a82a8aa166c57ef6b5f2af377c2a541124abf79ac0700cf9249837", + "group_key": null, + "unknown_odd_types": null + } + ], "unknown_odd_types": null }, - "expected": "544150500004000000000224786667f7e9866baa56038367ad6145de1ee8f4a8b0993ebdf8883a0ad8be9c39244fcd360450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000d311020a982522e516ba0b46af8e81e559812aeb5122e8efe2f37b990a4f4b81f3ca99360000000000000000065e0200000001786667f7e9866baa56038367ad6145de1ee8f4a8b0993ebdf8883a0ad8be9c3936cd4f240000000000014a01000000000000225120c125e525e43647345b296eb2f150095b7de9855a051351c61a4d4a4093e0c11e000000000801000afd018e000100028a786667f7e9866baa56038367ad6145de1ee8f4a8b0993ebdf8883a0ad8be9c39244fcd364036343739383139393865626561383963306234623337333937303131356538326564366634313235633866613733313165346437646566613932326461616537000000000000000000000000000000000000000000000000000000000000000000000000010401010601010bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140d4c9dacc67cc7eea8fb0fdb25aeb0eaebfe7e64f9452481f39d4521caa03d5e51816e9be7a1eab4f55cfc4c5c830d1edd2d0bb8b7e22176a80705e4a4b74b9fe0e020000102102a949978365263a166a737ed35347b41112a91680df47a702bfdaf08bab17a0bb1121033726c2dea09255208270be3c1593276fa894078141ee7d223539e90621ab06150cbc000400000000022102ec63ba5f6bc18f393e68e3138ebf9ed421b4054a918337fa2f580a1baea02e190391014900010002209f31cea8764981eb043c2a5dac3381e47bacd224c5d53de80eb0b3f921ac783904220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff051b00c01876a914f6c97547d73156abb300ae059905c4acaadd09dd88160400000001178a786667f7e9866baa56038367ad6145de1ee8f4a8b0993ebdf8883a0ad8be9c39244fcd364036343739383139393865626561383963306234623337333937303131356538326564366634313235633866613733313165346437646566613932326461616537000000000000000000000000000000000000000000000000000000000000000000000000011921022f9d9a2a6190dca7ea724b72150d6f217026c1637f4af3847252259a73f38d8f", + "expected": "544150500004000000000224e151c00755920c30ec29a3703934bf50a28da102975deda77e758579ea3dfe4107b736580450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000627daea3518a226219c144142e10f8bd90e8a38c7971da58dadd13916f1115992c4160f30000000000000000065e0200000001e151c00755920c30ec29a3703934bf50a28da102975deda77e758579ea3dfe415836b7070000000000014a010000000000002251204cad16f67e2e3709041efe3b0f5b8dcad1a039d5794555b98a43cee0977a4204000000000801000afd018e000100028ae151c00755920c30ec29a3703934bf50a28da102975deda77e758579ea3dfe4107b736584062653866623536393837633737663538313835323666313831346265383233333530656162313339333566333164383434383435313765393234616566373861000000000000000000000000000000000000000000000000000000000000000000000000010401010601010bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140abdc1c6834228d35712c519d7bd30976596e8524c46366ef738198ed3d97a19de1d3f183356690f304bf336c8277117654d491bbef898ef9362dd7d85f8a6a9e0e020000102102e7a6fd063ffaef05e4478bed272911e6988c4583d9f3aed0edd7c9b38a1b6b801121035554e4818d4e6a394ea36a2c3153fec3ac286ce633bb236eb37535a12e18e7570ce40004000000000221023ba17278e68c2aaa1d66cff879d4a76296040e4647ef2ff91c86e3c017552d9c03b90149000100022078f571bbf9df60ceebad3702600f9cb4f8aabe4a05db4a6661c80ccf2411ea7a04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a000198af7ab6d8359228c79484934a597447e6d274783e3fce101f18bed16ef19afb0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf051b00c01876a914f6c97547d73156abb300ae059905c4acaadd09dd88160400000001178ae151c00755920c30ec29a3703934bf50a28da102975deda77e758579ea3dfe4107b73658406265386662353639383763373766353831383532366631383134626538323333353065616231333933356633316438343438343531376539323461656637386100000000000000000000000000000000000000000000000000000000000000000000000001192102e3f526ff5372a961c158ac871ad6ee1b416750fdf2923ca193ffaf648d97e5631bb7025a0b31012f032d040a406b32d6109c9b14678a0a274f01a910ae295f6efb0afe5f5abf44ccde263b560a06633e2bf0006f28295d0e0256051021024beed7feee46e63c491d32562fa9b0adda1a0ae6637014d49225d795b92f11345a0b31012f032d040a76b062901a52720da85c0aa1e4b38eaf3f44c6c6ef0a8362f2f54fc00e09d6fc0a25640854c15dfcacaa8a0e022f071021023dc0016731a82a8aa166c57ef6b5f2af377c2a541124abf79ac0700cf9249837", "comment": "collectible with leaf preimage" }, { "proof": { - "prev_out": "173a0c2bf9fc6568bb5389421657ff34179dc34f182db92d0169a39144bed31f:1094946953", + "prev_out": "55ece0eafd839a1e094f9a70e7ac7417bf383423cfcde2c269398e40b01aa47d:2950239675", "block_header": { "version": 0, "prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "merkle_root": "7a73d3be140fc49c0265d36f50959aafa07586179110b97ff0ad891f884166d7", - "timestamp": 892973546, + "merkle_root": "8a4e23d5311259f603f5438838ec6dba433f0939809ec4c92f6239992f46ad56", + "timestamp": 1325329117, "bits": 0, "nonce": 0 }, "block_height": 1, - "anchor_tx": "02000000011fd3be4491a369012db92d184fc39d1734ff5716428953bb6865fcf92b0c3a17899043410000000000014a010000000000002251201663f37f1064f50e3487f50f16df62cde9345619e5a7d4e639fc23f961dcf70500000000", + "anchor_tx": "02000000017da41ab0408e3969c2e2cdcf233438bf1774ace7709a4f091e9a83fdeae0ec55bb15d9af0000000000014a01000000000000225120a3d8da59ff1a47b8a17ed79d9daaa7742a63ae81d28c0727c05e6c397c4f949200000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 0, - "genesis_first_prev_out": "173a0c2bf9fc6568bb5389421657ff34179dc34f182db92d0169a39144bed31f:1094946953", - "genesis_tag": "9bf2fb26c901ff354cde1607ee294b39f32b7c7822ba64f84ab43ca0c6e6b91c", + "genesis_first_prev_out": "55ece0eafd839a1e094f9a70e7ac7417bf383423cfcde2c269398e40b01aa47d:2950239675", + "genesis_tag": "f520c889b79bf504cfb57c7601232d589baccea9d6e263e25c27741d3f6c62cb", "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "genesis_output_index": 0, "genesis_type": 1, @@ -314,33 +477,33 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "d75d417c5ae0f47c293a1896f2528819cc6b61ecc04ee7cff2758e8bb2d6e27ee290dfde7ac9b0f9bdd09b8e61f92a94727a3a11635e9fd5eb815c479973daf4" + "82048c74b2aa5ad634082988209a430e7ef396e22594e6aec8f10c94ba841d8bde66d1ec15a798267451dc6add6136af91f4d80efc0e3a03a2bfcc8733303247" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "024ac3196cbe3a15ad894b2ea7a5e3f79b1f0dbc195b9c6a3ff144b48428a241d6", + "script_key": "0221dff90995848af0820470628d2b1aa4e8cf78fb792659a3b96b92517cf93997", "group_key": { - "group_key": "03d800536beffc3d4327a95f3fee3315c760cd7d4b0509b3487e9dcd3c3582c41f" + "group_key": "02ec3bba0d4b06cecf845d8de6ffbb990ef2cc27b7342f675b2ae4d10002f831fa" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "026bdd99e676c1302b827f4f426deeaff18c077ccdd7d3e5289fa02a41a9167516", + "internal_key": "0290345e9cf9ce57d5b5a96c8364a0363a76836f2dc4c003a1637bd79053099d59", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "8777141e52325cd7094471149d31a4e91d27d4440b50f1e231742060a7972d05", + "tap_key": "680db58942ff6cc8cf9d60e699e07da2880339cea3c291ebc69cc98b6aaa0643", "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2, + "proof": "0001113d0ee1181a4c6346794ed3e7d9e7b0b4265be08080f1a6df73e06fcf92164b0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", + "version": 0, "unknown_odd_types": null }, "unknown_odd_types": null @@ -357,42 +520,67 @@ "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "173a0c2bf9fc6568bb5389421657ff34179dc34f182db92d0169a39144bed31f:1094946953", - "tag": "9bf2fb26c901ff354cde1607ee294b39f32b7c7822ba64f84ab43ca0c6e6b91c", + "first_prev_out": "55ece0eafd839a1e094f9a70e7ac7417bf383423cfcde2c269398e40b01aa47d:2950239675", + "tag": "f520c889b79bf504cfb57c7601232d589baccea9d6e263e25c27741d3f6c62cb", "meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "output_index": 0, "type": 1 }, "group_key_reveal": { - "raw_key": "02e7208d6d0019e286808e7144df072d34a5fb32477e4baed60cf2359edf1961f9", + "raw_key": "03a65f4753bf4d6645efe2c876d9e95f2fb3127457745efb29970279e1a99d592f", "tapscript_root": "" }, + "alt_leaves": [ + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": null, + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 38515, + "script_key": "026b575114b4537ab61378b187c1eb38e867d0bfd3bbd264f51e6dff905f641344", + "group_key": null, + "unknown_odd_types": null + } + ], "unknown_odd_types": null }, - "expected": "5441505000040000000002241fd3be4491a369012db92d184fc39d1734ff5716428953bb6865fcf92b0c3a17414390890450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000d76641881f89adf07fb91091178675a0af9a95506fd365029cc40f14bed3737aeab139350000000000000000065e02000000011fd3be4491a369012db92d184fc39d1734ff5716428953bb6865fcf92b0c3a17899043410000000000014a010000000000002251201663f37f1064f50e3487f50f16df62cde9345619e5a7d4e639fc23f961dcf705000000000801000afd018e000100028a1fd3be4491a369012db92d184fc39d1734ff5716428953bb6865fcf92b0c3a17414390894039626632666232366339303166663335346364653136303765653239346233396633326237633738323262613634663834616234336361306336653662393163000000000000000000000000000000000000000000000000000000000000000000000000010401010601010bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140d75d417c5ae0f47c293a1896f2528819cc6b61ecc04ee7cff2758e8bb2d6e27ee290dfde7ac9b0f9bdd09b8e61f92a94727a3a11635e9fd5eb815c479973daf40e0200001021024ac3196cbe3a15ad894b2ea7a5e3f79b1f0dbc195b9c6a3ff144b48428a241d6112103d800536beffc3d4327a95f3fee3315c760cd7d4b0509b3487e9dcd3c3582c41f0ce20004000000000221026bdd99e676c1302b827f4f426deeaff18c077ccdd7d3e5289fa02a41a916751603b7014900010002208777141e52325cd7094471149d31a4e91d27d4440b50f1e231742060a7972d0504220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0541016c2e4bb01e316abaaee288d69c06cc608cedefd6e1a06813786c4ec51b6e1d3868ba2662554025b18af167c2ab17cd720b0c46ac7bd5750800b93c0b26a4af43160400000001178a1fd3be4491a369012db92d184fc39d1734ff5716428953bb6865fcf92b0c3a1741439089403962663266623236633930316666333534636465313630376565323934623339663332623763373832326261363466383461623433636130633665366239316300000000000000000000000000000000000000000000000000000000000000000000000001192102e7208d6d0019e286808e7144df072d34a5fb32477e4baed60cf2359edf1961f9", + "expected": "5441505000040000000002247da41ab0408e3969c2e2cdcf233438bf1774ace7709a4f091e9a83fdeae0ec55afd915bb0450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000056ad462f9939622fc9c49e8039093f43ba6dec388843f503f6591231d5234e8addeafe4e0000000000000000065e02000000017da41ab0408e3969c2e2cdcf233438bf1774ace7709a4f091e9a83fdeae0ec55bb15d9af0000000000014a01000000000000225120a3d8da59ff1a47b8a17ed79d9daaa7742a63ae81d28c0727c05e6c397c4f9492000000000801000afd018e000100028a7da41ab0408e3969c2e2cdcf233438bf1774ace7709a4f091e9a83fdeae0ec55afd915bb4066353230633838396237396266353034636662353763373630313233326435383962616363656139643665323633653235633237373431643366366336326362000000000000000000000000000000000000000000000000000000000000000000000000010401010601010bad01ab016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342014082048c74b2aa5ad634082988209a430e7ef396e22594e6aec8f10c94ba841d8bde66d1ec15a798267451dc6add6136af91f4d80efc0e3a03a2bfcc87333032470e02000010210221dff90995848af0820470628d2b1aa4e8cf78fb792659a3b96b92517cf93997112102ec3bba0d4b06cecf845d8de6ffbb990ef2cc27b7342f675b2ae4d10002f831fa0cfd010a00040000000002210290345e9cf9ce57d5b5a96c8364a0363a76836f2dc4c003a1637bd79053099d5903df01490001000220680db58942ff6cc8cf9d60e699e07da2880339cea3c291ebc69cc98b6aaa064304220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000100024a0001113d0ee1181a4c6346794ed3e7d9e7b0b4265be08080f1a6df73e06fcf92164b0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf0541016c2e4bb01e316abaaee288d69c06cc608cedefd6e1a06813786c4ec51b6e1d3868ba2662554025b18af167c2ab17cd720b0c46ac7bd5750800b93c0b26a4af43160400000001178a7da41ab0408e3969c2e2cdcf233438bf1774ace7709a4f091e9a83fdeae0ec55afd915bb406635323063383839623739626635303463666235376337363031323332643538396261636365613964366532363365323563323737343164336636633632636200000000000000000000000000000000000000000000000000000000000000000000000001192103a65f4753bf4d6645efe2c876d9e95f2fb3127457745efb29970279e1a99d592f1b2d012b0b0201000e0296731021026b575114b4537ab61378b187c1eb38e867d0bfd3bbd264f51e6dff905f641344", "comment": "collectible with branch preimage" }, { "proof": { - "prev_out": "6eacca377ef58485d68b10d6326b40eabc4eef7a2694763d55cb471941e52a6b:2388591733", + "prev_out": "b131e8bf1faf0cf5251722cee10365790c96d24a03c6d982930cf840a79c3b11:2303128125", "block_header": { "version": 0, "prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "merkle_root": "d7dea5e8b9d0676beb739058c50d56694f7c99ff842c5e08d351480998899daf", - "timestamp": 2667985277, + "merkle_root": "be40146a942578a6f80459b78eef240a59af657a0b3c5ea78b43569a4fecb321", + "timestamp": 1154067264, "bits": 0, "nonce": 0 }, "block_height": 1, - "anchor_tx": "02000000016b2ae5411947cb553d7694267aef4ebcea406b32d6108bd68584f57e37caac6e75045f8e0000000000014a010000000000002251201a92e0a3637976d81301d1f88008712eb30da9760fa4bb88a08768656397574100000000", + "anchor_tx": "0200000001113b9ca740f80c9382d9c6034ad2960c796503e1ce221725f50caf1fbfe831b13df246890000000000014a01000000000000225120d182343167f0813e9774fe4f5abac5218b7fa731f07ba25b805d07902c9ce45300000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 0, - "genesis_first_prev_out": "6eacca377ef58485d68b10d6326b40eabc4eef7a2694763d55cb471941e52a6b:2388591733", - "genesis_tag": "50a28da102975deda77e758579ea3dfe4136abf752b3b8271d03e944b3c9db36", + "genesis_first_prev_out": "b131e8bf1faf0cf5251722cee10365790c96d24a03c6d982930cf840a79c3b11:2303128125", + "genesis_tag": "e73bff706f7ff4b6f44090a32711f3208e4e4b89cb5165ce64002cbd9c2887aa", "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "genesis_output_index": 0, "genesis_type": 0, @@ -407,33 +595,33 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "dfefe7b848e2ed0fcf25a55b6caa009fe8c857a0bbd06a42843e2a227405d256b4397880017190ca747802396e7745091fe1e0aac715dfa6df049744719d10a2" + "edff1d88815b04d8888a47668779c1714ac53a73f05428b4225d42faaf18a7f57065b16a6989b021257d4d008df476e905bffd0f80e41574e16d898c8f842a69" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "0208e8e9320ca67b3323d821f5dc075e400cf776aa51fbf749333177f0e8e535d8", + "script_key": "02bd95a15c00d04072a14037ecf39c5eb2c78af08339de5d5bc36f37fffb7c6a38", "group_key": { - "group_key": "02a176beb1c80df22d0e52945ce1eedd0d9a3d1dfd2e2bf5e223970ef28c9898a9" + "group_key": "02f41e1851d9639457693a0d01b4938839af5805860bcf31fcce1324208d835c6e" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "021ba73bc71049b3ceedc2c1213116e70da56ad5f743f8a2423b915af0979e26cf", + "internal_key": "0271ce767df01ab541c147fb4afae5b2858470d6d1c14f24c2b48879df40494449", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "d063a629c6805aa3d896c552521a8e7ca89e3c0859c2237755383f4105e76a10", + "tap_key": "5183b80789c923ebe1df734849febd3fc163247f8ea5b35def0f700a6cb0b8d0", "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2, + "proof": "000125f2e451b399ce9005c5e67d99afa0e1ec40ceb4a8f2c8768a7158f9605b9f400000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "version": 0, "unknown_odd_types": null }, "unknown_odd_types": null @@ -450,42 +638,119 @@ "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "6eacca377ef58485d68b10d6326b40eabc4eef7a2694763d55cb471941e52a6b:2388591733", - "tag": "50a28da102975deda77e758579ea3dfe4136abf752b3b8271d03e944b3c9db36", + "first_prev_out": "b131e8bf1faf0cf5251722cee10365790c96d24a03c6d982930cf840a79c3b11:2303128125", + "tag": "e73bff706f7ff4b6f44090a32711f3208e4e4b89cb5165ce64002cbd9c2887aa", "meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "output_index": 0, "type": 0 }, "group_key_reveal": { - "raw_key": "031caeea1251b1f1902d4a2abf7c461645dcb3c373f054bb44b75cfc08270b242c", + "raw_key": "03ce9d8ce13d468201c49e04eb4d4718d2a9ca431a1059260fd4d7f663df607b26", "tapscript_root": "" }, + "alt_leaves": [ + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "207f0a3b584c62316492", + "b49753b5d5027ce15a4f", + "0a58250d8fb50e77f2bf" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 10541, + "script_key": "0211b60a21c6bca5bdf7c5209b1be70aaa3f0760284a057c9a2c0f2508a395d1dc", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": null, + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 56745, + "script_key": "02d63eabcc3e8ba9d302ddf5d1a015c1b93109335e2eba8556c455db85285dba76", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "5b6fe9d8500944cbe800" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 23105, + "script_key": "0239efa01c0a330ceb2ec4bb535819b44d23c2c41a4cfea1fcd4d108e4d2948e2d", + "group_key": null, + "unknown_odd_types": null + } + ], "unknown_odd_types": null }, - "expected": "5441505000040000000002246b2ae5411947cb553d7694267aef4ebcea406b32d6108bd68584f57e37caac6e8e5f04750450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000af9d8998094851d3085e2c84ff997c4f69560dc5589073eb6b67d0b9e8a5ded77d39069f0000000000000000065e02000000016b2ae5411947cb553d7694267aef4ebcea406b32d6108bd68584f57e37caac6e75045f8e0000000000014a010000000000002251201a92e0a3637976d81301d1f88008712eb30da9760fa4bb88a087686563975741000000000801000afd0190000100028a6b2ae5411947cb553d7694267aef4ebcea406b32d6108bd68584f57e37caac6e8e5f04754035306132386461313032393735646564613737653735383537396561336466653431333661626637353262336238323731643033653934346233633964623336000000000000000000000000000000000000000000000000000000000000000000000000000401000603fd13880bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140dfefe7b848e2ed0fcf25a55b6caa009fe8c857a0bbd06a42843e2a227405d256b4397880017190ca747802396e7745091fe1e0aac715dfa6df049744719d10a20e02000010210208e8e9320ca67b3323d821f5dc075e400cf776aa51fbf749333177f0e8e535d8112102a176beb1c80df22d0e52945ce1eedd0d9a3d1dfd2e2bf5e223970ef28c9898a90c9f0004000000000221021ba73bc71049b3ceedc2c1213116e70da56ad5f743f8a2423b915af0979e26cf037401490001000220d063a629c6805aa3d896c552521a8e7ca89e3c0859c2237755383f4105e76a1004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160400000001178a6b2ae5411947cb553d7694267aef4ebcea406b32d6108bd68584f57e37caac6e8e5f04754035306132386461313032393735646564613737653735383537396561336466653431333661626637353262336238323731643033653934346233633964623336000000000000000000000000000000000000000000000000000000000000000000000000001921031caeea1251b1f1902d4a2abf7c461645dcb3c373f054bb44b75cfc08270b242c", + "expected": "544150500004000000000224113b9ca740f80c9382d9c6034ad2960c796503e1ce221725f50caf1fbfe831b18946f23d0450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000021b3ec4f9a56438ba75e3c0b7a65af590a24ef8eb75904f8a67825946a1440be40abc9440000000000000000065e0200000001113b9ca740f80c9382d9c6034ad2960c796503e1ce221725f50caf1fbfe831b13df246890000000000014a01000000000000225120d182343167f0813e9774fe4f5abac5218b7fa731f07ba25b805d07902c9ce453000000000801000afd0190000100028a113b9ca740f80c9382d9c6034ad2960c796503e1ce221725f50caf1fbfe831b18946f23d4065373362666637303666376666346236663434303930613332373131663332303865346534623839636235313635636536343030326362643963323838376161000000000000000000000000000000000000000000000000000000000000000000000000000401000603fd13880bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140edff1d88815b04d8888a47668779c1714ac53a73f05428b4225d42faaf18a7f57065b16a6989b021257d4d008df476e905bffd0f80e41574e16d898c8f842a690e020000102102bd95a15c00d04072a14037ecf39c5eb2c78af08339de5d5bc36f37fffb7c6a38112102f41e1851d9639457693a0d01b4938839af5805860bcf31fcce1324208d835c6e0cc700040000000002210271ce767df01ab541c147fb4afae5b2858470d6d1c14f24c2b48879df40494449039c014900010002205183b80789c923ebe1df734849febd3fc163247f8ea5b35def0f700a6cb0b8d004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000100024a000125f2e451b399ce9005c5e67d99afa0e1ec40ceb4a8f2c8768a7158f9605b9f400000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f160400000001178a113b9ca740f80c9382d9c6034ad2960c796503e1ce221725f50caf1fbfe831b18946f23d406537336266663730366637666634623666343430393061333237313166333230386534653462383963623531363563653634303032636264396332383837616100000000000000000000000000000000000000000000000000000000000000000000000000192103ce9d8ce13d468201c49e04eb4d4718d2a9ca431a1059260fd4d7f663df607b261bb7034f0b2601240322030a207f0a3b584c623164920ab49753b5d5027ce15a4f0a0a58250d8fb50e77f2bf0e02292d10210211b60a21c6bca5bdf7c5209b1be70aaa3f0760284a057c9a2c0f2508a395d1dc2b0b0201000e02dda9102102d63eabcc3e8ba9d302ddf5d1a015c1b93109335e2eba8556c455db85285dba76390b10010e030c010a5b6fe9d8500944cbe8000e025a4110210239efa01c0a330ceb2ec4bb535819b44d23c2c41a4cfea1fcd4d108e4d2948e2d", "comment": "normal genesis" }, { "proof": { - "prev_out": "24878d40633e14a538d3b494db185b70ab53ba3a5aceec2c8aaa25fcd6090ec0:3243509860", + "prev_out": "0777e80684a6bfdcdf4331a977072290a23119ea0f2f89172b9cced2e2ebdd25:828040879", "block_header": { "version": 0, "prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "merkle_root": "76f578a99dae366508143c39334f20da14b8386b54a6c95c5d408721be29d151", - "timestamp": 4123218895, + "merkle_root": "c597a86db5ea249ea9625cfd55a172c06b5b46242d9cfcee30c13c0c4b35e5d5", + "timestamp": 2324858245, "bits": 0, "nonce": 0 }, "block_height": 1, - "anchor_tx": "0200000001c00e09d6fc25aa8a2cecce5a3aba53ab705b18db94b4d338a5143e63408d8724640854c10000000000014a01000000000000225120b02b59d6c5330083a8a74fc35fea61284c898027d6664f7643e72d392198edf600000000", + "anchor_tx": "020000000125ddebe2d2ce9c2b17892f0fea1931a290220777a93143dfdcbfa68406e87707afe65a310000000000014a01000000000000225120193e7eb1192dda70a52e8e69d2522bf996a2f7ff9fe219e5550297a7e8c2ccd500000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 1, - "genesis_first_prev_out": "24878d40633e14a538d3b494db185b70ab53ba3a5aceec2c8aaa25fcd6090ec0:3243509860", - "genesis_tag": "3e3eae14c28d0cea39d2901a52720da85ca1e4b38eaf3f44c6c6ef8362f2f54f", + "genesis_first_prev_out": "0777e80684a6bfdcdf4331a977072290a23119ea0f2f89172b9cced2e2ebdd25:828040879", + "genesis_tag": "7fa68aa8af5e39cc416e734d373c5ebebc9cdcc595bcce3c7bd3d8df93fab7e1", "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "genesis_output_index": 0, "genesis_type": 0, @@ -500,32 +765,32 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "fb58b3572b6e53189324a71498521767c32bb51452fcec7f48da1e744e134ce9cf7f770a051baf81ffc436b6711d22230e731d876e9a0b28a2e86394673317f4" + "e94a24bf5e574b84ee338ef23e8b0268bd176e678dba91980af7124ee2f44b15662313b280c6523adbd017155bcac28ee06e57c857d0cb34af9d44227a56cd3f" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "0252806fc4eb74ec1ab8617ddb457375856639678b62da0db14454871df1cf3fdd", + "script_key": "02284c510c36bdcd2e1ad058d1307a3ba2b34fbc5a502342a38ec1ece576d07bde", "group_key": { - "group_key": "03e561d40a9ef63980ba1db6ef19cd602b88c282cc2dcab43f2cdddbd9781dfd71" + "group_key": "035b2983203fc7a1c9dabc105070a9b8f65f2e058b43af61272b71e3e31c8db47e" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "0234c45db41df59b37c4edb9ba4243fbf9d5b4493c3fb507568ba769b40ff416b4", + "internal_key": "02562dcaca04d8f19774f2fa56f301ed0a80adf26fe176060ddaad69e127b9397e", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 1, - "tap_key": "0b24d64e3603f58c0d324a57e0a4bb181bde1d70d5a504229eb8580355d33b2e", + "tap_key": "65eccdcb425ac22b9784afeb7ed78b4b60fe297717004ea06f6284bea6012484", "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "proof": "00011f130c0191d1bb2833e91c68e2eeb9173a8b18a23b848e553481dc05d5e11d980000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", "version": 1, "unknown_odd_types": null }, @@ -543,42 +808,71 @@ "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "24878d40633e14a538d3b494db185b70ab53ba3a5aceec2c8aaa25fcd6090ec0:3243509860", - "tag": "3e3eae14c28d0cea39d2901a52720da85ca1e4b38eaf3f44c6c6ef8362f2f54f", + "first_prev_out": "0777e80684a6bfdcdf4331a977072290a23119ea0f2f89172b9cced2e2ebdd25:828040879", + "tag": "7fa68aa8af5e39cc416e734d373c5ebebc9cdcc595bcce3c7bd3d8df93fab7e1", "meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "output_index": 0, "type": 0 }, "group_key_reveal": { - "raw_key": "02c99d7f6fed73ee5f0a0f74641077c40de745da603f136119dc3c39c44f806abc", + "raw_key": "030f0bdc861acbc7b4ecc201517dd3a077343e2f7f1028dec9e33e6a1f1ff4303f", "tapscript_root": "" }, + "alt_leaves": [ + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "6a1b8b19f53784c19e9b", + "eac03c875a27db029de3", + "7ae37a42318813487685" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 48636, + "script_key": "02bb760ce2baf98a1c0fa02df2db204771ff61e6476280ac836af78149643a9d47", + "group_key": null, + "unknown_odd_types": null + } + ], "unknown_odd_types": null }, - "expected": "544150500004000000000224c00e09d6fc25aa8a2cecce5a3aba53ab705b18db94b4d338a5143e63408d8724c15408640450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000051d129be2187405d5cc9a6546b38b814da204f33393c14086536ae9da978f576cf53c3f50000000000000000065e0200000001c00e09d6fc25aa8a2cecce5a3aba53ab705b18db94b4d338a5143e63408d8724640854c10000000000014a01000000000000225120b02b59d6c5330083a8a74fc35fea61284c898027d6664f7643e72d392198edf6000000000801000afd0190000101028ac00e09d6fc25aa8a2cecce5a3aba53ab705b18db94b4d338a5143e63408d8724c15408644033653365616531346332386430636561333964323930316135323732306461383563613165346233386561663366343463366336656638333632663266353466000000000000000000000000000000000000000000000000000000000000000000000000000401000603fd13880bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140fb58b3572b6e53189324a71498521767c32bb51452fcec7f48da1e744e134ce9cf7f770a051baf81ffc436b6711d22230e731d876e9a0b28a2e86394673317f40e02000010210252806fc4eb74ec1ab8617ddb457375856639678b62da0db14454871df1cf3fdd112103e561d40a9ef63980ba1db6ef19cd602b88c282cc2dcab43f2cdddbd9781dfd710c9f00040000000002210234c45db41df59b37c4edb9ba4243fbf9d5b4493c3fb507568ba769b40ff416b40374014900010102200b24d64e3603f58c0d324a57e0a4bb181bde1d70d5a504229eb8580355d33b2e04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010102220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160400000001178ac00e09d6fc25aa8a2cecce5a3aba53ab705b18db94b4d338a5143e63408d8724c1540864403365336561653134633238643063656133396432393031613532373230646138356361316534623338656166336634346336633665663833363266326635346600000000000000000000000000000000000000000000000000000000000000000000000000192102c99d7f6fed73ee5f0a0f74641077c40de745da603f136119dc3c39c44f806abc", + "expected": "54415050000400000000022425ddebe2d2ce9c2b17892f0fea1931a290220777a93143dfdcbfa68406e87707315ae6af0450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000d5e5354b0c3cc130eefc9c2d24465b6bc072a155fd5c62a99e24eab56da897c58585928a0000000000000000065e020000000125ddebe2d2ce9c2b17892f0fea1931a290220777a93143dfdcbfa68406e87707afe65a310000000000014a01000000000000225120193e7eb1192dda70a52e8e69d2522bf996a2f7ff9fe219e5550297a7e8c2ccd5000000000801000afd0190000101028a25ddebe2d2ce9c2b17892f0fea1931a290220777a93143dfdcbfa68406e87707315ae6af4037666136386161386166356533396363343136653733346433373363356562656263396364636335393562636365336337626433643864663933666162376531000000000000000000000000000000000000000000000000000000000000000000000000000401000603fd13880bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140e94a24bf5e574b84ee338ef23e8b0268bd176e678dba91980af7124ee2f44b15662313b280c6523adbd017155bcac28ee06e57c857d0cb34af9d44227a56cd3f0e020000102102284c510c36bdcd2e1ad058d1307a3ba2b34fbc5a502342a38ec1ece576d07bde1121035b2983203fc7a1c9dabc105070a9b8f65f2e058b43af61272b71e3e31c8db47e0cc7000400000000022102562dcaca04d8f19774f2fa56f301ed0a80adf26fe176060ddaad69e127b9397e039c0149000101022065eccdcb425ac22b9784afeb7ed78b4b60fe297717004ea06f6284bea601248404220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000101024a00011f130c0191d1bb2833e91c68e2eeb9173a8b18a23b848e553481dc05d5e11d980000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f160400000001178a25ddebe2d2ce9c2b17892f0fea1931a290220777a93143dfdcbfa68406e87707315ae6af4037666136386161386166356533396363343136653733346433373363356562656263396364636335393562636365336337626433643864663933666162376531000000000000000000000000000000000000000000000000000000000000000000000000001921030f0bdc861acbc7b4ecc201517dd3a077343e2f7f1028dec9e33e6a1f1ff4303f1b51014f0b2601240322030a6a1b8b19f53784c19e9b0aeac03c875a27db029de30a7ae37a423188134876850e02bdfc102102bb760ce2baf98a1c0fa02df2db204771ff61e6476280ac836af78149643a9d47", "comment": "normal genesis v1 asset version" }, { "proof": { - "prev_out": "ecfdbc6db30e37baf44754e0c0c1b4a3c813d346b556783ccb94539bfd839a1e:1441587434", + "prev_out": "05d0c9bf542b517f2b9a1d40367517c6beccfcba9075b05ee246c455bd0580d0:865175050", "block_header": { "version": 0, "prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "merkle_root": "1cae011316a80aec0e9481964293e39a0dd8b02ec675a40a6078772d31ea1987", - "timestamp": 430920634, + "merkle_root": "0f5ac9604f9de2ecab2d5c321e81076b85ffb684751c0c1880f9ffe16bc3bcad", + "timestamp": 1135306327, "bits": 0, "nonce": 0 }, "block_height": 1, - "anchor_tx": "02000000011e9a83fd9b5394cb3c7856b546d313c8a3b4c1c0e05447f4ba370eb36dbcfdeceae0ec550000000000014a010000000000002251201f4f57ab2516bed8a66602d5779b024da3563348967c4dfdd6807c4890a3a3c000000000", + "anchor_tx": "0200000001d08005bd55c446e25eb07590bafcccbec6177536401d9a2b7f512b54bfc9d0050a8691330000000000014a010000000000002251202c777d7c9014a27b7bc9dfcd25bfb6a1cca288724a017e08b0258a26e081065b00000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 0, - "genesis_first_prev_out": "ecfdbc6db30e37baf44754e0c0c1b4a3c813d346b556783ccb94539bfd839a1e:1441587434", - "genesis_tag": "cbbb15d9afbcbf7f7da41ab0408e3969c2e2cdcf233438bf1774ace7709a4f09", + "genesis_first_prev_out": "05d0c9bf542b517f2b9a1d40367517c6beccfcba9075b05ee246c455bd0580d0:865175050", + "genesis_tag": "e60c5ead6fc7ae77ba1d259b188a4b21c86fbc23d728b45347eada650af24c56", "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "genesis_output_index": 0, "genesis_type": 0, @@ -593,33 +887,33 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "01812980fea4a4e15323b9a139860b75dac835b37a22dd023b62adb3a8c4df9ca09b27c192c411c3489e72a0eae90a58cf72ccdb1695516e7186e3bbbdcdaca1" + "842a92c9951c3a7e6f97bf318f836217ac6caf7fca98905e1f5d2f361a38b72858b13cc9ee1dad57af0b12b5e86742b43dd807cbffb16b98cbb67cae028ecfd9" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02dc2498c4a39ce2641d62a080f389ee23f85cedd148d2511424bee6981739e77a", + "script_key": "02d35a03bbb94a14d72913f87a90e20f9ca8bcf95c67731a5d973721210d375357", "group_key": { - "group_key": "029beb652212f8d24482c447a1ee63fe67e4aa4f9857fceefd2df9b38515eb26b9" + "group_key": "033e56842e890fd03f538b837462e5946d2b8f92ec04213cff6d7fbcfd471bd8cb" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "0289cd00336dfde32c68aaa745a20fbf83a10ab5105dbb660f5d64b53b45e11802", + "internal_key": "028404054b5e22500271af67b7b340fbf0e7f110ea1731fb239497cdfa5eee196c", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "4080191e1c4dfaee2ee7bc720049b89604ab41bd38b5a751d15c9d91151936bc", + "tap_key": "df66c74b82aba8eb00d2a7bf8e4177bb20b57a04847708e99dbf49d9c47674bb", "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2, + "proof": "000102d244aabb9b87df6d22ddf87eb433ebe072e477b058288b3fa98627e3039a9b0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "version": 0, "unknown_odd_types": null }, "unknown_odd_types": null @@ -636,42 +930,95 @@ "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "ecfdbc6db30e37baf44754e0c0c1b4a3c813d346b556783ccb94539bfd839a1e:1441587434", - "tag": "cbbb15d9afbcbf7f7da41ab0408e3969c2e2cdcf233438bf1774ace7709a4f09", + "first_prev_out": "05d0c9bf542b517f2b9a1d40367517c6beccfcba9075b05ee246c455bd0580d0:865175050", + "tag": "e60c5ead6fc7ae77ba1d259b188a4b21c86fbc23d728b45347eada650af24c56", "meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "output_index": 0, "type": 0 }, "group_key_reveal": { - "raw_key": "03d7da6d3c7084ce744c70cc7b7fcef866fec05e1d3ee258f2fe1b89dcc3989bd4", + "raw_key": "0287f104e5cdd6c49ed9c2ca743598e452967cf01791c0cd3727f2b40cc57db0be", "tapscript_root": "" }, + "alt_leaves": [ + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "0f0d510354aa845580ff" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 25556, + "script_key": "020fd2a2afa537e1a53425210b01358ef6e85858546c6572e6b87adf6a6d0b0022", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "87078143ee26a586ad23", + "139d5041723470bf24a8" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 55215, + "script_key": "022edd571905d68404d5e84579ef0143221804912777355da44aef5ee5130e6509", + "group_key": null, + "unknown_odd_types": null + } + ], "unknown_odd_types": null }, - "expected": "5441505000040000000002241e9a83fd9b5394cb3c7856b546d313c8a3b4c1c0e05447f4ba370eb36dbcfdec55ece0ea0450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900000000008719ea312d7778600aa475c62eb0d80d9ae393429681940eec0aa8161301ae1cba53af190000000000000000065e02000000011e9a83fd9b5394cb3c7856b546d313c8a3b4c1c0e05447f4ba370eb36dbcfdeceae0ec550000000000014a010000000000002251201f4f57ab2516bed8a66602d5779b024da3563348967c4dfdd6807c4890a3a3c0000000000801000afd0190000100028a1e9a83fd9b5394cb3c7856b546d313c8a3b4c1c0e05447f4ba370eb36dbcfdec55ece0ea4063626262313564396166626362663766376461343161623034303865333936396332653263646366323333343338626631373734616365373730396134663039000000000000000000000000000000000000000000000000000000000000000000000000000401000603fd13880bad01ab016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342014001812980fea4a4e15323b9a139860b75dac835b37a22dd023b62adb3a8c4df9ca09b27c192c411c3489e72a0eae90a58cf72ccdb1695516e7186e3bbbdcdaca10e020000102102dc2498c4a39ce2641d62a080f389ee23f85cedd148d2511424bee6981739e77a1121029beb652212f8d24482c447a1ee63fe67e4aa4f9857fceefd2df9b38515eb26b90cbc00040000000002210289cd00336dfde32c68aaa745a20fbf83a10ab5105dbb660f5d64b53b45e118020391014900010002204080191e1c4dfaee2ee7bc720049b89604ab41bd38b5a751d15c9d91151936bc04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff051b00c01876a914f6c97547d73156abb300ae059905c4acaadd09dd88160400000001178a1e9a83fd9b5394cb3c7856b546d313c8a3b4c1c0e05447f4ba370eb36dbcfdec55ece0ea406362626231356439616662636266376637646134316162303430386533393639633265326364636632333334333862663137373461636537373039613466303900000000000000000000000000000000000000000000000000000000000000000000000000192103d7da6d3c7084ce744c70cc7b7fcef866fec05e1d3ee258f2fe1b89dcc3989bd4", + "expected": "544150500004000000000224d08005bd55c446e25eb07590bafcccbec6177536401d9a2b7f512b54bfc9d0053391860a0450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000adbcc36be1fff980180c1c7584b6ff856b07811e325c2dabece29d4f60c95a0f5766ab430000000000000000065e0200000001d08005bd55c446e25eb07590bafcccbec6177536401d9a2b7f512b54bfc9d0050a8691330000000000014a010000000000002251202c777d7c9014a27b7bc9dfcd25bfb6a1cca288724a017e08b0258a26e081065b000000000801000afd0190000100028ad08005bd55c446e25eb07590bafcccbec6177536401d9a2b7f512b54bfc9d0053391860a4065363063356561643666633761653737626131643235396231383861346232316338366662633233643732386234353334376561646136353061663234633536000000000000000000000000000000000000000000000000000000000000000000000000000401000603fd13880bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140842a92c9951c3a7e6f97bf318f836217ac6caf7fca98905e1f5d2f361a38b72858b13cc9ee1dad57af0b12b5e86742b43dd807cbffb16b98cbb67cae028ecfd90e020000102102d35a03bbb94a14d72913f87a90e20f9ca8bcf95c67731a5d973721210d3753571121033e56842e890fd03f538b837462e5946d2b8f92ec04213cff6d7fbcfd471bd8cb0ce40004000000000221028404054b5e22500271af67b7b340fbf0e7f110ea1731fb239497cdfa5eee196c03b901490001000220df66c74b82aba8eb00d2a7bf8e4177bb20b57a04847708e99dbf49d9c47674bb04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000100024a000102d244aabb9b87df6d22ddf87eb433ebe072e477b058288b3fa98627e3039a9b0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f051b00c01876a914f6c97547d73156abb300ae059905c4acaadd09dd88160400000001178ad08005bd55c446e25eb07590bafcccbec6177536401d9a2b7f512b54bfc9d0053391860a40653630633565616436666337616537376261316432353962313838613462323163383666626332336437323862343533343765616461363530616632346335360000000000000000000000000000000000000000000000000000000000000000000000000019210287f104e5cdd6c49ed9c2ca743598e452967cf01791c0cd3727f2b40cc57db0be1b8002390b10010e030c010a0f0d510354aa845580ff0e0263d41021020fd2a2afa537e1a53425210b01358ef6e85858546c6572e6b87adf6a6d0b0022440b1b01190317020a87078143ee26a586ad230a139d5041723470bf24a80e02d7af1021022edd571905d68404d5e84579ef0143221804912777355da44aef5ee5130e6509", "comment": "normal with leaf preimage" }, { "proof": { - "prev_out": "d982930cf840a79c3ba2d5288946f23d11aa87289cbd2c0064ce6551cb89a390:552800551", + "prev_out": "5742f012c8d4bdf038c8cd8563130769fb0f4fb4ebb265b33b61e4f43a570dd2:3362861525", "block_header": { "version": 0, "prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "merkle_root": "046de7c6c268bf3668b1c4ff9af436064af371c18694b799b57c883a4d2f8d95", - "timestamp": 2773153607, + "merkle_root": "dcd44c1dac6df12d0b5ae95d976553570d558563311b05cdd8dd1d06d88196dd", + "timestamp": 1752217073, "bits": 0, "nonce": 0 }, "block_height": 1, - "anchor_tx": "020000000190a389cb5165ce64002cbd9c2887aa113df2468928d5a23b9ca740f80c9382d92711f3200000000000014a01000000000000225120585160f549b8d8035614530574473a2cef5f0115b51a96986f6c357dbb9466f400000000", + "anchor_tx": "0200000001d20d573af4e4613bb365b2ebb44f0ffb6907136385cdc838f0bdd4c812f04257d53171c80000000000014a01000000000000225120a90bdc7bf82f472e870c251a22bab7267b2c2cc6d5fa259ac7e5448b0baff34600000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 0, - "genesis_first_prev_out": "d982930cf840a79c3ba2d5288946f23d11aa87289cbd2c0064ce6551cb89a390:552800551", - "genesis_tag": "090f07c79a6f571c246f3e9ac0b7413ef110bd58b00ce73bff706f7ff4b6f440", + "genesis_first_prev_out": "5742f012c8d4bdf038c8cd8563130769fb0f4fb4ebb265b33b61e4f43a570dd2:3362861525", + "genesis_tag": "8b938045da519843854b0ed3f7ba951a493f321f0966603022c1dfc579b99ed9", "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "genesis_output_index": 0, "genesis_type": 0, @@ -686,33 +1033,33 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "c973a884901c20f4fa87011489cc7a6a3b4a9e426da4f2068d1c876f386665c1f0c0ecaaa5a6f164c599c6beee16274eac4f1efc5c096b613d3e44235d6d75af" + "609e12398b60866e8ae10670b4106749ec15d97353bbb1a4f5d9d957ab6d52f781bfee0c640845b286bebda630c9813778f20f51104395918107651790eb47d3" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02685acdc9cc542ffb86d3f01ccef519a33c8cfd9bc1a09331752b27554dbf00c4", + "script_key": "02e894598b4794a4a043e76a12d3e7a10940ba8abd935ec78253f9c5562d995078", "group_key": { - "group_key": "02b0bce47b2df5abe9b402c21bf0000619cd26efd3fba67584f0762146e72064f7" + "group_key": "03a992d8794756789c02812bd179cd1ed1d46b0a99ea7787eeb94d593f1e772e5a" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "02c43c396853e4ab072c8833a888b190d32ebd98f5e63e2944ad1c58db9f01b16e", + "internal_key": "026da41ecd35137df229b3b1214ad2ca395eef34f1219687ec6f8fc2e7d7fbff6e", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "4001442ae04a140bc4079881d2eaf032712ec56a3e501147c940b2dbfa32e81e", + "tap_key": "15225e230c4ae036aa8af735a0678200422f08dc55ddf745e53469ff32d582a9", "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 0, + "proof": "000152020994e122e6c5d47cd68b8dd64415a2b1fbe30ac6b2c6027df2b0faecb2b20000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "version": 2, "unknown_odd_types": null }, "unknown_odd_types": null @@ -729,42 +1076,71 @@ "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "d982930cf840a79c3ba2d5288946f23d11aa87289cbd2c0064ce6551cb89a390:552800551", - "tag": "090f07c79a6f571c246f3e9ac0b7413ef110bd58b00ce73bff706f7ff4b6f440", + "first_prev_out": "5742f012c8d4bdf038c8cd8563130769fb0f4fb4ebb265b33b61e4f43a570dd2:3362861525", + "tag": "8b938045da519843854b0ed3f7ba951a493f321f0966603022c1dfc579b99ed9", "meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", "output_index": 0, "type": 0 }, "group_key_reveal": { - "raw_key": "03e4d1e192bff9476f0daac591e7832ed6f705245ea6396c0d84390437f0daad96", + "raw_key": "02eba1537db3570a824572b54f0628c03cecc8c374d1c4ba842e6b05de7f0ccdb2", "tapscript_root": "" }, + "alt_leaves": [ + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "627eb5589733e563e19d", + "3045aad3e226488ac02c", + "ca4291aed169dce5039d" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 51472, + "script_key": "02c8f7cf0acd0a776e2d650c6034b159d5232dc03d7a2403656cc2bd448a44c49e", + "group_key": null, + "unknown_odd_types": null + } + ], "unknown_odd_types": null }, - "expected": "54415050000400000000022490a389cb5165ce64002cbd9c2887aa113df2468928d5a23b9ca740f80c9382d920f311270450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000958d2f4d3a887cb599b79486c171f34a0636f49affc4b16836bf68c2c6e76d0447f74aa50000000000000000065e020000000190a389cb5165ce64002cbd9c2887aa113df2468928d5a23b9ca740f80c9382d92711f3200000000000014a01000000000000225120585160f549b8d8035614530574473a2cef5f0115b51a96986f6c357dbb9466f4000000000801000afd0190000100028a90a389cb5165ce64002cbd9c2887aa113df2468928d5a23b9ca740f80c9382d920f311274030393066303763373961366635373163323436663365396163306237343133656631313062643538623030636537336266663730366637666634623666343430000000000000000000000000000000000000000000000000000000000000000000000000000401000603fd13880bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140c973a884901c20f4fa87011489cc7a6a3b4a9e426da4f2068d1c876f386665c1f0c0ecaaa5a6f164c599c6beee16274eac4f1efc5c096b613d3e44235d6d75af0e020000102102685acdc9cc542ffb86d3f01ccef519a33c8cfd9bc1a09331752b27554dbf00c4112102b0bce47b2df5abe9b402c21bf0000619cd26efd3fba67584f0762146e72064f70ce2000400000000022102c43c396853e4ab072c8833a888b190d32ebd98f5e63e2944ad1c58db9f01b16e03b7014900010002204001442ae04a140bc4079881d2eaf032712ec56a3e501147c940b2dbfa32e81e04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010002220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0541016c2e4bb01e316abaaee288d69c06cc608cedefd6e1a06813786c4ec51b6e1d3868ba2662554025b18af167c2ab17cd720b0c46ac7bd5750800b93c0b26a4af43160400000001178a90a389cb5165ce64002cbd9c2887aa113df2468928d5a23b9ca740f80c9382d920f31127403039306630376337396136663537316332343666336539616330623734313365663131306264353862303063653733626666373036663766663462366634343000000000000000000000000000000000000000000000000000000000000000000000000000192103e4d1e192bff9476f0daac591e7832ed6f705245ea6396c0d84390437f0daad96", + "expected": "544150500004000000000224d20d573af4e4613bb365b2ebb44f0ffb6907136385cdc838f0bdd4c812f04257c87131d50450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000dd9681d8061dddd8cd051b316385550d575365975de95a0b2df16dac1d4cd4dcf1b570680000000000000000065e0200000001d20d573af4e4613bb365b2ebb44f0ffb6907136385cdc838f0bdd4c812f04257d53171c80000000000014a01000000000000225120a90bdc7bf82f472e870c251a22bab7267b2c2cc6d5fa259ac7e5448b0baff346000000000801000afd0190000100028ad20d573af4e4613bb365b2ebb44f0ffb6907136385cdc838f0bdd4c812f04257c87131d54038623933383034356461353139383433383534623065643366376261393531613439336633323166303936363630333032326331646663353739623939656439000000000000000000000000000000000000000000000000000000000000000000000000000401000603fd13880bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140609e12398b60866e8ae10670b4106749ec15d97353bbb1a4f5d9d957ab6d52f781bfee0c640845b286bebda630c9813778f20f51104395918107651790eb47d30e020000102102e894598b4794a4a043e76a12d3e7a10940ba8abd935ec78253f9c5562d995078112103a992d8794756789c02812bd179cd1ed1d46b0a99ea7787eeb94d593f1e772e5a0cfd010a0004000000000221026da41ecd35137df229b3b1214ad2ca395eef34f1219687ec6f8fc2e7d7fbff6e03df0149000100022015225e230c4ae036aa8af735a0678200422f08dc55ddf745e53469ff32d582a904220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a000152020994e122e6c5d47cd68b8dd64415a2b1fbe30ac6b2c6027df2b0faecb2b20000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0541016c2e4bb01e316abaaee288d69c06cc608cedefd6e1a06813786c4ec51b6e1d3868ba2662554025b18af167c2ab17cd720b0c46ac7bd5750800b93c0b26a4af43160400000001178ad20d573af4e4613bb365b2ebb44f0ffb6907136385cdc838f0bdd4c812f04257c87131d5403862393338303435646135313938343338353462306564336637626139353161343933663332316630393636363033303232633164666335373962393965643900000000000000000000000000000000000000000000000000000000000000000000000000192102eba1537db3570a824572b54f0628c03cecc8c374d1c4ba842e6b05de7f0ccdb21b51014f0b2601240322030a627eb5589733e563e19d0a3045aad3e226488ac02c0aca4291aed169dce5039d0e02c910102102c8f7cf0acd0a776e2d650c6034b159d5232dc03d7a2403656cc2bd448a44c49e", "comment": "normal with branch preimage" }, { "proof": { - "prev_out": "fdff9c326a20af6b41292da30874792c8ee8f98c4033fe26566a467079b76fbe:2139108756", + "prev_out": "e35dc80a82dfe5aec24155b9170e16ee49c22554adf4ea22c17e65a845d3302c:793492550", "block_header": { "version": 0, "prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "merkle_root": "f4c4f67729956d175c185b1f880f4af806f06174743c170f6e353713593dd4f5", - "timestamp": 3410233680, + "merkle_root": "7c428dd25c651fe2cf1fdd8fc928175cba4f925ff9929a0259725c1d6cf62ada", + "timestamp": 3676381796, "bits": 0, "nonce": 0 }, "block_height": 1, - "anchor_tx": "0200000001be6fb77970466a5626fe33408cf9e88e2c797408a32d29416baf206a329cfffd9435807f0000000000014a01000000000000225120f6d806bcfade68f55452482a12be5b11089ebeef336e7a6d88c57e7a3f87d1aa00000000", + "anchor_tx": "02000000012c30d345a8657ec122eaf4ad5425c249ee160e17b95541c2aee5df820ac85de346bc4b2f0000000000014a01000000000000225120318ca484b64dd1ee150accd0fb66785e26a032357b7004fdc05984002457267700000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 0, - "genesis_first_prev_out": "fdff9c326a20af6b41292da30874792c8ee8f98c4033fe26566a467079b76fbe:2139108756", - "genesis_tag": "3b584c62316492b49753b5d5027ce15a4f0a58250d8fb50e77f2bf4f0152e5d4", + "genesis_first_prev_out": "e35dc80a82dfe5aec24155b9170e16ee49c22554adf4ea22c17e65a845d3302c:793492550", + "genesis_tag": "980630f34ce001c0ab7ac65e502d39b216cbc50e73a32eaf936401e2506bd8b8", "genesis_meta_hash": "8374ea9ab27bfc4baf4ce2f28645549617d16fbc5674dd81197b685778081b01", "genesis_output_index": 0, "genesis_type": 0, @@ -779,33 +1155,33 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "fe9c6d003d5d20e6bcf5723600d6dc4c649c3344e8e5627fc69a7aff50f250a0a3292f1f4978bfb782aeafb2bfd94ff5acef6b20f1ec0d09a7d4c98c35fecd0f" + "77e00a49766536994977643dec39b5a69f4be06bad30625db3f11b6a239276f652acac88347579b983ca04e0b502dd81742e28d5e14ce0c4e00f3fb07706c6d0" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02008a0fde1764c0c532d5d8918c9a03d5812c84bc85b7c17372233a06a9f46a95", + "script_key": "022c5c724c7f5ea19dc465aef27c7cf7e6628353244cc5f7a810fe7b47067743b3", "group_key": { - "group_key": "021f1336135a7422003206516b8e04d663f1b610b85d68f9ca5f4758cac5b210c4" + "group_key": "03093cbf40bc24037914ab3fd5cdc0cf848e117be07a3bd664f70aec5e34de4a4d" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "026e493a79aba31ae43b0fbaf1c4392f1fa8cf848f143af9f570e0ba94e9cb4cf9", + "internal_key": "023dc92502a78012d399c614719654e3025ecd1e1991b2476196a63b85bd47de5a", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "d0a8e3a41ee64d976b2b438604cfef96b241d7a8cd1b0d64297e912ea274fb5c", + "tap_key": "8482243a24e104c21ec327276a1c261f17125ee6563fda15f6b2b569bd6d05fa", "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 0, + "proof": "0001f568e3de03d6a45f519ac9d3c2b34023c0fb087c676d0bdde0facd5e9a9f5e3e0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", + "version": 2, "unknown_odd_types": null }, "unknown_odd_types": null @@ -826,42 +1202,95 @@ "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "fdff9c326a20af6b41292da30874792c8ee8f98c4033fe26566a467079b76fbe:2139108756", - "tag": "3b584c62316492b49753b5d5027ce15a4f0a58250d8fb50e77f2bf4f0152e5d4", + "first_prev_out": "e35dc80a82dfe5aec24155b9170e16ee49c22554adf4ea22c17e65a845d3302c:793492550", + "tag": "980630f34ce001c0ab7ac65e502d39b216cbc50e73a32eaf936401e2506bd8b8", "meta_hash": "8374ea9ab27bfc4baf4ce2f28645549617d16fbc5674dd81197b685778081b01", "output_index": 0, "type": 0 }, "group_key_reveal": { - "raw_key": "03c8041c6fe4ac4ef3e495ab750d110a4e2fc98591fbb00ee80c57fca0ec1cb3b4", + "raw_key": "030a147a7a56b83b3be6d69bf51b5f84c50985cb836a0e9e4f8fd091373c27215d", "tapscript_root": "" }, + "alt_leaves": [ + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": null, + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 35806, + "script_key": "02c1e542a30ba2fa82c8ecf321c4fc1190844d188cb82174a0283883ba611f7c35", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "14ba49a67700dae4e2e5", + "df8cf3859ebddada6745", + "fba6a04c5c37c7ca3503", + "6f11732ce8bc27b48868" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 61446, + "script_key": "02dae721129b54a79e498b2d322b0b846b6295b2ae594146c1c6e24219d70dfedc", + "group_key": null, + "unknown_odd_types": null + } + ], "unknown_odd_types": null }, - "expected": "544150500004000000000224be6fb77970466a5626fe33408cf9e88e2c797408a32d29416baf206a329cfffd7f8035940450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000f5d43d591337356e0f173c747461f006f84a0f881f5b185c176d952977f6c4f4500944cb0000000000000000065e0200000001be6fb77970466a5626fe33408cf9e88e2c797408a32d29416baf206a329cfffd9435807f0000000000014a01000000000000225120f6d806bcfade68f55452482a12be5b11089ebeef336e7a6d88c57e7a3f87d1aa000000000801000afd0190000100028abe6fb77970466a5626fe33408cf9e88e2c797408a32d29416baf206a329cfffd7f80359440336235383463363233313634393262343937353362356435303237636531356134663061353832353064386662353065373766326266346630313532653564348374ea9ab27bfc4baf4ce2f28645549617d16fbc5674dd81197b685778081b0100000000000401000603fd13880bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140fe9c6d003d5d20e6bcf5723600d6dc4c649c3344e8e5627fc69a7aff50f250a0a3292f1f4978bfb782aeafb2bfd94ff5acef6b20f1ec0d09a7d4c98c35fecd0f0e020000102102008a0fde1764c0c532d5d8918c9a03d5812c84bc85b7c17372233a06a9f46a951121021f1336135a7422003206516b8e04d663f1b610b85d68f9ca5f4758cac5b210c40c9f0004000000000221026e493a79aba31ae43b0fbaf1c4392f1fa8cf848f143af9f570e0ba94e9cb4cf9037401490001000220d0a8e3a41ee64d976b2b438604cfef96b241d7a8cd1b0d64297e912ea274fb5c04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010002220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff111f000100021a6d65616e7420696e2063726f6b696e67206e657665726d6f7265160400000001178abe6fb77970466a5626fe33408cf9e88e2c797408a32d29416baf206a329cfffd7f80359440336235383463363233313634393262343937353362356435303237636531356134663061353832353064386662353065373766326266346630313532653564348374ea9ab27bfc4baf4ce2f28645549617d16fbc5674dd81197b685778081b010000000000192103c8041c6fe4ac4ef3e495ab750d110a4e2fc98591fbb00ee80c57fca0ec1cb3b4", + "expected": "5441505000040000000002242c30d345a8657ec122eaf4ad5425c249ee160e17b95541c2aee5df820ac85de32f4bbc460450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000da2af66c1d5c7259029a92f95f924fba5c1728c98fdd1fcfe21f655cd28d427c642221db0000000000000000065e02000000012c30d345a8657ec122eaf4ad5425c249ee160e17b95541c2aee5df820ac85de346bc4b2f0000000000014a01000000000000225120318ca484b64dd1ee150accd0fb66785e26a032357b7004fdc059840024572677000000000801000afd0190000100028a2c30d345a8657ec122eaf4ad5425c249ee160e17b95541c2aee5df820ac85de32f4bbc4640393830363330663334636530303163306162376163363565353032643339623231366362633530653733613332656166393336343031653235303662643862388374ea9ab27bfc4baf4ce2f28645549617d16fbc5674dd81197b685778081b0100000000000401000603fd13880bad01ab016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342014077e00a49766536994977643dec39b5a69f4be06bad30625db3f11b6a239276f652acac88347579b983ca04e0b502dd81742e28d5e14ce0c4e00f3fb07706c6d00e0200001021022c5c724c7f5ea19dc465aef27c7cf7e6628353244cc5f7a810fe7b47067743b3112103093cbf40bc24037914ab3fd5cdc0cf848e117be07a3bd664f70aec5e34de4a4d0cc70004000000000221023dc92502a78012d399c614719654e3025ecd1e1991b2476196a63b85bd47de5a039c014900010002208482243a24e104c21ec327276a1c261f17125ee6563fda15f6b2b569bd6d05fa04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001f568e3de03d6a45f519ac9d3c2b34023c0fb087c676d0bdde0facd5e9a9f5e3e0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf111f000100021a6d65616e7420696e2063726f6b696e67206e657665726d6f7265160400000001178a2c30d345a8657ec122eaf4ad5425c249ee160e17b95541c2aee5df820ac85de32f4bbc4640393830363330663334636530303163306162376163363565353032643339623231366362633530653733613332656166393336343031653235303662643862388374ea9ab27bfc4baf4ce2f28645549617d16fbc5674dd81197b685778081b0100000000001921030a147a7a56b83b3be6d69bf51b5f84c50985cb836a0e9e4f8fd091373c27215d1b88022b0b0201000e028bde102102c1e542a30ba2fa82c8ecf321c4fc1190844d188cb82174a0283883ba611f7c355a0b31012f032d040a14ba49a67700dae4e2e50adf8cf3859ebddada67450afba6a04c5c37c7ca35030a6f11732ce8bc27b488680e02f006102102dae721129b54a79e498b2d322b0b846b6295b2ae594146c1c6e24219d70dfedc", "comment": "normal asset with a meta reveal" }, { "proof": { - "prev_out": "c5dc9cbcbe5e3c374d736e41cc395eafa88aa67ffe7f03e3abff4a5ddb0efd7a:2578929544", + "prev_out": "9335b357407fecc26962aad7bd1eae1fa5aa56e6a51f579fe6955b23d37ee45f:551640224", "block_header": { "version": 0, "prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "merkle_root": "76c53f88f383cf2c9d63831d034627c9370da9594279f208f3bc4a8c99d7dd82", - "timestamp": 2297446151, + "merkle_root": "3e5d04a632e65baaa0cc04842192fa815f1704a2d57dbb460df3ecb77e4b631a", + "timestamp": 1206922666, "bits": 0, "nonce": 0 }, "block_height": 1, - "anchor_tx": "02000000017afd0edb5d4affabe3037ffe7fa68aa8af5e39cc416e734d373c5ebebc9cdcc58857b7990000000000014a01000000000000225120f0855468273b3f4e451d059305b9d409a9f6d4e158c4dcc9013db29f67c686aa00000000", + "anchor_tx": "02000000015fe47ed3235b95e69f571fa5e656aaa51fae1ebdd7aa6269c2ec7f4057b33593a05ce1200000000000014a010000000000002251200784028f4439734ef71bd1b5b1260aacf50073094df7cd81cee497a38a13694600000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 0, - "genesis_first_prev_out": "c5dc9cbcbe5e3c374d736e41cc395eafa88aa67ffe7f03e3abff4a5ddb0efd7a:2578929544", - "genesis_tag": "24fce0b727b03072e6415a761f03abaa40abc9448fddeb2191d945c04767af84", + "genesis_first_prev_out": "9335b357407fecc26962aad7bd1eae1fa5aa56e6a51f579fe6955b23d37ee45f:551640224", + "genesis_tag": "ef09ff14be23922801f6eaee41409158b45f2dec82d17caaba160cd640ff7349", "genesis_meta_hash": "b88b6898981d6244121143ce9dbfa2377d81d94ca77ef8eb0252ba2fe0e13002", "genesis_output_index": 0, "genesis_type": 1, @@ -876,33 +1305,33 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "3399ddf1adc9ab5b691969f59a0d554b9d36893c2fc254f2c456eba9bb074facaadcddf34ed0410d1a2bd7c7d39555470cc41502776e9fa22f825fc35ec93413" + "9fc16a1e07f181255d54bfeced34b787fcc38352d6dcdf7d4ea5214a104c8ce788eaedf64e49c9a8dddd6ea5ae6ac2890e7c654146bac09fdbf8b437ea4dd026" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "026f02044f01832e01e3302ced99effc110c7a19e03f525449ee9c83e02141d657", + "script_key": "0208b809ce0c51c53cd336ab44b36b8307554d7622c1d797165ba08c97c62989a7", "group_key": { - "group_key": "02516aabe379a6da71929b2b9c724c01ca20667df051313c4e2d3980e4eeb8bee3" + "group_key": "0292077130a4a47010a6ba5c3b482bcd90f323af5497c60dc3e7e202f25e725fcb" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "028040bc40ca90e5c80b6c960db4b3f74906b2b4d8732ae4d4738d046177e22cc3", + "internal_key": "02586bc0dd4cb03df6d1effe9f24f94835b48ac913813e6c6a44df2bbfb57303c5", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "553c3f303bb4670345fb12ab8fc4ad0ef74c35e6ed8f55c0261d157dcf825aac", + "tap_key": "535a7f653e6a36949c6d1ef4ac78bca97f680f077d126bac46ab5e99c03784b1", "unknown_odd_types": null }, "taproot_asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 0, + "version": 2, "unknown_odd_types": null }, "unknown_odd_types": null @@ -923,42 +1352,43 @@ "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "c5dc9cbcbe5e3c374d736e41cc395eafa88aa67ffe7f03e3abff4a5ddb0efd7a:2578929544", - "tag": "24fce0b727b03072e6415a761f03abaa40abc9448fddeb2191d945c04767af84", + "first_prev_out": "9335b357407fecc26962aad7bd1eae1fa5aa56e6a51f579fe6955b23d37ee45f:551640224", + "tag": "ef09ff14be23922801f6eaee41409158b45f2dec82d17caaba160cd640ff7349", "meta_hash": "b88b6898981d6244121143ce9dbfa2377d81d94ca77ef8eb0252ba2fe0e13002", "output_index": 0, "type": 1 }, "group_key_reveal": { - "raw_key": "02b009abb543147033a99f48d9f36a67141ccea06db086ce8391dfe47fb9a34f3c", + "raw_key": "035fc3d7f69e92d1b8ce3a7f93f0a253e068d68cf34d3f401ba55d3ab10de9a058", "tapscript_root": "" }, + "alt_leaves": null, "unknown_odd_types": null }, - "expected": "5441505000040000000002247afd0edb5d4affabe3037ffe7fa68aa8af5e39cc416e734d373c5ebebc9cdcc599b757880450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d619000000000082ddd7998c4abcf308f2794259a90d37c92746031d83639d2ccf83f3883fc576073ff0880000000000000000065e02000000017afd0edb5d4affabe3037ffe7fa68aa8af5e39cc416e734d373c5ebebc9cdcc58857b7990000000000014a01000000000000225120f0855468273b3f4e451d059305b9d409a9f6d4e158c4dcc9013db29f67c686aa000000000801000afd018e000100028a7afd0edb5d4affabe3037ffe7fa68aa8af5e39cc416e734d373c5ebebc9cdcc599b757884032346663653062373237623033303732653634313561373631663033616261613430616263393434386664646562323139316439343563303437363761663834b88b6898981d6244121143ce9dbfa2377d81d94ca77ef8eb0252ba2fe0e1300200000000010401010601010bad01ab01650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034201403399ddf1adc9ab5b691969f59a0d554b9d36893c2fc254f2c456eba9bb074facaadcddf34ed0410d1a2bd7c7d39555470cc41502776e9fa22f825fc35ec934130e0200001021026f02044f01832e01e3302ced99effc110c7a19e03f525449ee9c83e02141d657112102516aabe379a6da71929b2b9c724c01ca20667df051313c4e2d3980e4eeb8bee30c9f0004000000000221028040bc40ca90e5c80b6c960db4b3f74906b2b4d8732ae4d4738d046177e22cc3037401490001000220553c3f303bb4670345fb12ab8fc4ad0ef74c35e6ed8f55c0261d157dcf825aac04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010002220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff111e00010002197368616c6c206265206c6966746564206e657665726d6f7265160400000001178a7afd0edb5d4affabe3037ffe7fa68aa8af5e39cc416e734d373c5ebebc9cdcc599b757884032346663653062373237623033303732653634313561373631663033616261613430616263393434386664646562323139316439343563303437363761663834b88b6898981d6244121143ce9dbfa2377d81d94ca77ef8eb0252ba2fe0e130020000000001192102b009abb543147033a99f48d9f36a67141ccea06db086ce8391dfe47fb9a34f3c", + "expected": "5441505000040000000002245fe47ed3235b95e69f571fa5e656aaa51fae1ebdd7aa6269c2ec7f4057b3359320e15ca00450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900000000001a634b7eb7ecf30d46bb7dd5a204175f81fa92218404cca0aa5be632a6045d3eaa2df0470000000000000000065e02000000015fe47ed3235b95e69f571fa5e656aaa51fae1ebdd7aa6269c2ec7f4057b33593a05ce1200000000000014a010000000000002251200784028f4439734ef71bd1b5b1260aacf50073094df7cd81cee497a38a136946000000000801000afd018e000100028a5fe47ed3235b95e69f571fa5e656aaa51fae1ebdd7aa6269c2ec7f4057b3359320e15ca04065663039666631346265323339323238303166366561656534313430393135386234356632646563383264313763616162613136306364363430666637333439b88b6898981d6244121143ce9dbfa2377d81d94ca77ef8eb0252ba2fe0e1300200000000010401010601010bad01ab01650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034201409fc16a1e07f181255d54bfeced34b787fcc38352d6dcdf7d4ea5214a104c8ce788eaedf64e49c9a8dddd6ea5ae6ac2890e7c654146bac09fdbf8b437ea4dd0260e02000010210208b809ce0c51c53cd336ab44b36b8307554d7622c1d797165ba08c97c62989a711210292077130a4a47010a6ba5c3b482bcd90f323af5497c60dc3e7e202f25e725fcb0c9f000400000000022102586bc0dd4cb03df6d1effe9f24f94835b48ac913813e6c6a44df2bbfb57303c5037401490001000220535a7f653e6a36949c6d1ef4ac78bca97f680f077d126bac46ab5e99c03784b104220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff111e00010002197368616c6c206265206c6966746564206e657665726d6f7265160400000001178a5fe47ed3235b95e69f571fa5e656aaa51fae1ebdd7aa6269c2ec7f4057b3359320e15ca04065663039666631346265323339323238303166366561656534313430393135386234356632646563383264313763616162613136306364363430666637333439b88b6898981d6244121143ce9dbfa2377d81d94ca77ef8eb0252ba2fe0e1300200000000011921035fc3d7f69e92d1b8ce3a7f93f0a253e068d68cf34d3f401ba55d3ab10de9a058", "comment": "collectible with a meta reveal" }, { "proof": { - "prev_out": "bc46d3302cb8d86b50e2016493af2ea3730ec5cb16b2392d505ec67aabc0f9a8:4080010904", + "prev_out": "7b5126620a0319ee28c103c412b5342c1cdb63eaf9464c423f248b514e1600e7:2528809698", "block_header": { "version": 0, "prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f", - "merkle_root": "e2d2f3dfb84e99c103af3f30dd3795ea5675f08b09647f52a20aafac8d9d93d2", - "timestamp": 325477343, + "merkle_root": "4d8296688743d91e8dae755b9b5f4ac65057cbb2562ae2bd2fc52bef7c6db70e", + "timestamp": 3880198687, "bits": 0, "nonce": 0 }, "block_height": 1, - "anchor_tx": "0200000001a8f9c0ab7ac65e502d39b216cbc50e73a32eaf936401e2506bd8b82c30d346bc980630f30000000000014a01000000000000225120cb9408ccea9c0dfdaa84df1682b8d6456dd0517f5cf6c1ab3ab4ffb4296f819b00000000", + "anchor_tx": "0200000001e700164e518b243f424c46f9ea63db1c2c34b512c403c128ee19030a6226517be292ba960000000000014a0100000000000022512087c5895738b41cf39358c72acd68045bcde8caa83e30b6c8b5fc4bcc0ace35b200000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 0, - "genesis_first_prev_out": "bc46d3302cb8d86b50e2016493af2ea3730ec5cb16b2392d505ec67aabc0f9a8:4080010904", - "genesis_tag": "b570680746acd0cc7760331b663138d6d342b051b5df410637cf7aee9b0c8c10", + "genesis_first_prev_out": "7b5126620a0319ee28c103c412b5342c1cdb63eaf9464c423f248b514e1600e7:2528809698", + "genesis_tag": "861b96ca65e34d31f24d6f56ee85092314a4d7656205c15322f1c97613c079ea", "genesis_meta_hash": "bd4c1872ae986883d0e8efaccc2cebfb2141bcdf5fd99a51950ee10e461c0185", "genesis_output_index": 0, "genesis_type": 1, @@ -973,33 +1403,33 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "a98f77295cf6e8036babcad76d4f83889c337904d251ad68102f0f273f643d8b0074ed055cfde31696bf10b29c73f614e44d59226f8d854fc67268a7fd89eca3" + "53708a81ea99bb907ea297021dadc6f43c57bfdac91c578cb6df4d5b11b9f6d48c4e931ae3edf7944894c480291ddfbccc52df7bb72301a042e41408bf53e915" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "0273a275568550284049dd1820665f60ddf8643ddd9be43a4e44d197f73dcf1baf", + "script_key": "021fee70480d0e1993490293bb7a747b01602ab5ed55d3dc88f2178853f448e1b5", "group_key": { - "group_key": "030b5e577cbaec80aa165b436343487a132fc83c8344ad9fc9cf620dc774e2558e" + "group_key": "03dd2340c51f4b7e90984731e96af24a45eccdfc854c2b45f21ad8aada65c4dd88" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "02e23b842b840bc57d09cbe677fdd6c7e8d3769bcc2f9349351d8bcf07a84316f4", + "internal_key": "022681983a9b0ebfe74d02e665cf2409061b0038078230ef3d1c706880ce8814c9", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "ae4d192374a6b89d469513be52c7e49e95ec8e2ce1d35f2880fe080ed55fd3b3", + "tap_key": "01df08d7a8685881c98ac9d9f045aa953570726c8ff5a6b7ede1c948ee6f4ebb", "unknown_odd_types": null }, "taproot_asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 0, + "version": 2, "unknown_odd_types": null }, "unknown_odd_types": null @@ -1022,19 +1452,20 @@ "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "bc46d3302cb8d86b50e2016493af2ea3730ec5cb16b2392d505ec67aabc0f9a8:4080010904", - "tag": "b570680746acd0cc7760331b663138d6d342b051b5df410637cf7aee9b0c8c10", + "first_prev_out": "7b5126620a0319ee28c103c412b5342c1cdb63eaf9464c423f248b514e1600e7:2528809698", + "tag": "861b96ca65e34d31f24d6f56ee85092314a4d7656205c15322f1c97613c079ea", "meta_hash": "bd4c1872ae986883d0e8efaccc2cebfb2141bcdf5fd99a51950ee10e461c0185", "output_index": 0, "type": 1 }, "group_key_reveal": { - "raw_key": "0302b57a85b7748ea00e70c5861a97d0850b15124af71b69a7dfddac3dec483271", + "raw_key": "02076fa1bc3fa96db45917cf9532e73362f9588c7e834b70ee455188737dab7fa0", "tapscript_root": "" }, + "alt_leaves": null, "unknown_odd_types": null }, - "expected": "544150500004000000000224a8f9c0ab7ac65e502d39b216cbc50e73a32eaf936401e2506bd8b82c30d346bcf33006980450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000d2939d8dacaf0aa2527f64098bf07556ea9537dd303faf03c1994eb8dff3d2e2df6366130000000000000000065e0200000001a8f9c0ab7ac65e502d39b216cbc50e73a32eaf936401e2506bd8b82c30d346bc980630f30000000000014a01000000000000225120cb9408ccea9c0dfdaa84df1682b8d6456dd0517f5cf6c1ab3ab4ffb4296f819b000000000801000afd018e000100028aa8f9c0ab7ac65e502d39b216cbc50e73a32eaf936401e2506bd8b82c30d346bcf33006984062353730363830373436616364306363373736303333316236363331333864366433343262303531623564663431303633376366376165653962306338633130bd4c1872ae986883d0e8efaccc2cebfb2141bcdf5fd99a51950ee10e461c018500000000010401010601010bad01ab0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003420140a98f77295cf6e8036babcad76d4f83889c337904d251ad68102f0f273f643d8b0074ed055cfde31696bf10b29c73f614e44d59226f8d854fc67268a7fd89eca30e02000010210273a275568550284049dd1820665f60ddf8643ddd9be43a4e44d197f73dcf1baf1121030b5e577cbaec80aa165b436343487a132fc83c8344ad9fc9cf620dc774e2558e0c9f000400000000022102e23b842b840bc57d09cbe677fdd6c7e8d3769bcc2f9349351d8bcf07a84316f4037401490001000220ae4d192374a6b89d469513be52c7e49e95ec8e2ce1d35f2880fe080ed55fd3b304220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010002220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1126000101020e7b22666f6f223a2022626172227dfd7a690f646563696d616c446973706c61793f160400000001178aa8f9c0ab7ac65e502d39b216cbc50e73a32eaf936401e2506bd8b82c30d346bcf33006984062353730363830373436616364306363373736303333316236363331333864366433343262303531623564663431303633376366376165653962306338633130bd4c1872ae986883d0e8efaccc2cebfb2141bcdf5fd99a51950ee10e461c0185000000000119210302b57a85b7748ea00e70c5861a97d0850b15124af71b69a7dfddac3dec483271", + "expected": "544150500004000000000224e700164e518b243f424c46f9ea63db1c2c34b512c403c128ee19030a6226517b96ba92e20450000000006fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d61900000000000eb76d7cef2bc52fbde22a56b2cb5750c64a5f9b5b75ae8d1ed943876896824d1f2247e70000000000000000065e0200000001e700164e518b243f424c46f9ea63db1c2c34b512c403c128ee19030a6226517be292ba960000000000014a0100000000000022512087c5895738b41cf39358c72acd68045bcde8caa83e30b6c8b5fc4bcc0ace35b2000000000801000afd018e000100028ae700164e518b243f424c46f9ea63db1c2c34b512c403c128ee19030a6226517b96ba92e24038363162393663613635653334643331663234643666353665653835303932333134613464373635363230356331353332326631633937363133633037396561bd4c1872ae986883d0e8efaccc2cebfb2141bcdf5fd99a51950ee10e461c018500000000010401010601010bad01ab016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342014053708a81ea99bb907ea297021dadc6f43c57bfdac91c578cb6df4d5b11b9f6d48c4e931ae3edf7944894c480291ddfbccc52df7bb72301a042e41408bf53e9150e0200001021021fee70480d0e1993490293bb7a747b01602ab5ed55d3dc88f2178853f448e1b5112103dd2340c51f4b7e90984731e96af24a45eccdfc854c2b45f21ad8aada65c4dd880c9f0004000000000221022681983a9b0ebfe74d02e665cf2409061b0038078230ef3d1c706880ce8814c903740149000100022001df08d7a8685881c98ac9d9f045aa953570726c8ff5a6b7ede1c948ee6f4ebb04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1126000101020e7b22666f6f223a2022626172227dfd7a690f646563696d616c446973706c61793f160400000001178ae700164e518b243f424c46f9ea63db1c2c34b512c403c128ee19030a6226517b96ba92e24038363162393663613635653334643331663234643666353665653835303932333134613464373635363230356331353332326631633937363133633037396561bd4c1872ae986883d0e8efaccc2cebfb2141bcdf5fd99a51950ee10e461c01850000000001192102076fa1bc3fa96db45917cf9532e73362f9588c7e834b70ee455188737dab7fa0", "comment": "meta reveal with unknown odd type" } ], diff --git a/proof/testdata/proof_tlv_encoding_regtest.json b/proof/testdata/proof_tlv_encoding_regtest.json index 21b25f4fe..59ea2c6ce 100644 --- a/proof/testdata/proof_tlv_encoding_regtest.json +++ b/proof/testdata/proof_tlv_encoding_regtest.json @@ -2,20 +2,20 @@ "valid_test_cases": [ { "proof": { - "prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "block_header": { "version": 541065216, - "prev_block": "37fefb3f5638d1d8e141c104c5e8f37eaa1eebc06ec94b969b66535a390a1820", - "merkle_root": "5ae3e1ea8d5d2287ddd72c62e18d9a7ed07d89134df43e208ef5fc4345e11eb5", - "timestamp": 1718210324, + "prev_block": "3b35e1d5fd335c30dd04b42ca34313d056f1c92a522e7507241e08e284aa8f9a", + "merkle_root": "bd23d82c26f969d400b6ecc18ae808d641e617e655505e590b7a39eb9f862099", + "timestamp": 1733521991, "bits": 545259519, "nonce": 0 }, - "block_height": 441, - "anchor_tx": "02000000000101003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc900000000000000000002e803000000000000225120fe832c770281a91714ef09391d7ecfdd3dcad62150300574b48d6d55faacde025fd5f50500000000225120e714c655906329de4e32ba6f5ba1976e0cef60196e4e8f3ba52165ec9e7e16b702483045022100a23554aa6bc76c4fd6fcd250434f7e21546acf54a0678b65a4be0f3aab54b5ad02201c9f68043649eea30696221e18948dc3cdfa301438b6842c3c6d5ab1ee615acb0121022d5d9be9be7994d8941dfe7397d6a40207b2303bfae2cc0c0651740fd8b729ae00000000", + "block_height": 443, + "anchor_tx": "020000000001010028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e4700000000000000000002e8030000000000002251201de5c42c8a8b746e8546333f77af17351aacab80ad69bccb38c80bce6e9b8bef5fd5f5050000000022512007138e14f350280a1d8ddee3269e63475c460ec569f92c4e0a8d4699bf41f4bb0247304402204f36d4142a0766b659ad3de205cd6f6b2ff9799d2ba9678150a3d1dbfc81d2f602201ea43dbfa55ab6d603b89aae66751b3c0c858d0b1982bd38403b29d95bdfdb1a0121022a00c959d98510b311dec09ad2214f1267edfdea434a491d33f837192617c36400000000", "tx_merkle_proof": { "nodes": [ - "532486297436a8a787143c8fd68e07df248733d2af04ce40edcfc9909a12a59a" + "398b065a877db464f6daf462f12caf4883169b8dd02540edf4e4ccc18cb76376" ], "bits": [ false @@ -23,7 +23,7 @@ }, "asset": { "version": 0, - "genesis_first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "genesis_first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "genesis_tag": "first-itestbuxx", "genesis_meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "genesis_output_index": 0, @@ -44,62 +44,73 @@ ], "split_commitment_root": null, "script_version": 0, - "script_key": "027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d3", - "group_key": null + "script_key": "025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c", + "group_key": null, + "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "0345a9e7176b16f12a760cee94c02ebad7560651a715829df439e858654ad60c2c", + "internal_key": "0352a78f4268168a1219a30bb96ce37e5a73d6175a336947fa7376661667805e0a", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "0001aab8488a8e9822fce155021aa404d475282ee4839bba9a981032d7e2e3d1d7d800000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", - "version": 2 - } + "proof": "0001076553d07d1e80b22b6852656e98b3f090db89de729e0389bdd654050635ae4500000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, "exclusion_proofs": [ { "output_index": 1, - "internal_key": "02b0e7bde9386a96241c92086817b7299e598e633c360d396731ef734813010902", + "internal_key": "02773d842605766a0803e2ac601310b43cd2acbecd951a4910a915e8943e53ecb5", "commitment_proof": null, "tapscript_proof": { "tap_preimage_1": "", "tap_preimage_2": "", - "bip86": true - } + "bip86": true, + "unknown_odd_types": null + }, + "unknown_odd_types": null } ], "split_root_proof": null, "meta_reveal": { "type": 0, - "data": "69746573742d6d65746164617461" + "data": "69746573742d6d65746164617461", + "unknown_odd_types": null }, "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "tag": "first-itestbuxx", "meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "output_index": 0, "type": 0 }, - "group_key_reveal": null + "group_key_reveal": null, + "alt_leaves": null, + "unknown_odd_types": null }, - "expected": "544150500004000000000224003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc90000000004500000402020180a395a53669b964bc96ec0eb1eaa7ef3e8c504c141e1d8d138563ffbfe37b51ee14543fcf58e203ef44d13897dd07e9a8de1622cd7dd87225d8deae1e35a14cf6966ffff7f200000000006f702000000000101003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc900000000000000000002e803000000000000225120fe832c770281a91714ef09391d7ecfdd3dcad62150300574b48d6d55faacde025fd5f50500000000225120e714c655906329de4e32ba6f5ba1976e0cef60196e4e8f3ba52165ec9e7e16b702483045022100a23554aa6bc76c4fd6fcd250434f7e21546acf54a0678b65a4be0f3aab54b5ad02201c9f68043649eea30696221e18948dc3cdfa301438b6842c3c6d5ab1ee615acb0121022d5d9be9be7994d8941dfe7397d6a40207b2303bfae2cc0c0651740fd8b729ae000000000822019aa5129a90c9cfed40ce04afd2338724df078ed68f3c1487a7a8367429862453000af80001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd05dc0b690167016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0200001021027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d30cc700040000000002210345a9e7176b16f12a760cee94c02ebad7560651a715829df439e858654ad60c2c039c014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001aab8488a8e9822fce155021aa404d475282ee4839bba9a981032d7e2e3d1d7d800000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0d30012e000400000001022102b0e7bde9386a96241c92086817b7299e598e633c360d396731ef73481301090205030401011113000100020e69746573742d6d657461646174611604000001b91759003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea0000000000", + "expected": "5441505000040000000002240028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000450000040209a8faa84e2081e2407752e522ac9f156d01343a32cb404dd305c33fdd5e1353b9920869feb397a0b595e5055e617e641d608e88ac1ecb600d469f9262cd823bd47725367ffff7f200000000006f6020000000001010028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e4700000000000000000002e8030000000000002251201de5c42c8a8b746e8546333f77af17351aacab80ad69bccb38c80bce6e9b8bef5fd5f5050000000022512007138e14f350280a1d8ddee3269e63475c460ec569f92c4e0a8d4699bf41f4bb0247304402204f36d4142a0766b659ad3de205cd6f6b2ff9799d2ba9678150a3d1dbfc81d2f602201ea43dbfa55ab6d603b89aae66751b3c0c858d0b1982bd38403b29d95bdfdb1a0121022a00c959d98510b311dec09ad2214f1267edfdea434a491d33f837192617c364000000000822017663b78cc1cce4f4ed4025d08d9b168348af2cf162f4daf664b47d875a068b39000af800010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd05dc0b690167016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0200001021025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c0cc700040000000002210352a78f4268168a1219a30bb96ce37e5a73d6175a336947fa7376661667805e0a039c01490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001076553d07d1e80b22b6852656e98b3f090db89de729e0389bdd654050635ae4500000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf0d30012e000400000001022102773d842605766a0803e2ac601310b43cd2acbecd951a4910a915e8943e53ecb505030401011113000100020e69746573742d6d657461646174611604000001bb17590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea0000000000", "comment": "valid regtest genesis proof with meta reveal" }, { "proof": { - "prev_out": "bc9842a45bd691e081d0f25a9a1d770fd0563719e253a1700445c8b6fabf7a5d:0", + "prev_out": "2be239d331bc16887e14152ff0da00a7aa6e31899e965cb416440392e9f1d84c:0", "block_header": { "version": 0, "prev_block": "0000000000000000000000000000000000000000000000000000000000000000", @@ -109,14 +120,14 @@ "nonce": 0 }, "block_height": 0, - "anchor_tx": "020000000001025d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc00000000000000000002ea532b7f6f10d7ef5878d4bdae9c96a8c966fbefa0efc5dfd4034c59791f5b00000000000000000003e80300000000000022512080f7611a166819aab42e0b797b236863212bf398af3be7849294d4552d415005e803000000000000225120f0f9a8294653152502b69b2cc9ca54bf673a54ea03e4c9c778b5f984d7d8afdca9d0f505000000002251207e1c0ef01b3c3f9eb31c48f50d93de832127a2ef9c4e3088a9815da1d2e11e780140ebda6810d4ca9d220f567fe311fee267c4ed4fb1d7557e0267adb464a20eb4d01a41d9b20cb5a3f3e16065868f4139b9a682b9fcc52d64395166549e12308aa902473044022078d102f8005037362c1979c10e7c3e26b4190f4e2fda4eb596ef812be9798a00022059033397057c166563ef31eb2020eef0db9a371f8184c153e15411cfd7a1f817012102aa22f29c13156c03e4dfba265716673c69942b866b50641e3268c58067eba7ec00000000", + "anchor_tx": "020000000001024cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b000000000000000000062736a1f2dbc0332040eafe375e4922ace3da94f88ada2ce397e7914014a32500000000000000000003e8030000000000002251203efafc563c1ffb16afc844abe35e48ea0303bf8b03753c640da1924f81b79408e8030000000000002251208eb3db333954f26aa1eacd5f057b60a32c59987e0226b58dc8debb033bdee3e6a9d0f50500000000225120f09fc5609b3c82f778d27fe3f8e9b88a10edcebc7c35864940049991bf4445650140b4622c62287ae87d96fffa7fd34f58708b0d1e6f4ae5a85fc6705781dd92711129d9cd0e3774fdb0fa048d3bbc559dd3d8d76b84d56928025ef24ba0b1940a7d02473044022006229b6e9c59a1c5d68ced672808f075382b3b5c5bf44eb1c9e993593d4807c102206667b3a902f71aab2ddbaafe2cef32f1bde17da6522444e87fe1fd50d5aa90f20121025d3b26142dcb90504cbfbbbf70d92fc7579198ffe9bf497a3bf2c55df892512600000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 0, - "genesis_first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "genesis_first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "genesis_tag": "first-itestbuxx", "genesis_meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "genesis_output_index": 0, @@ -127,72 +138,85 @@ "prev_witnesses": [ { "prev_id": { - "out_point": "bc9842a45bd691e081d0f25a9a1d770fd0563719e253a1700445c8b6fabf7a5d:0", - "asset_id": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba", - "script_key": "027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d3" + "out_point": "2be239d331bc16887e14152ff0da00a7aa6e31899e965cb416440392e9f1d84c:0", + "asset_id": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "script_key": "025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c" }, "tx_witness": [ - "f40bdbc3d79e080ba95d04f8bdb785a28e8801705bb332dd5914ba683c401a9c25aa8851e4487e7f4b6d57e782542183b6622e1ee3d5953bbcb6d99e34ebb3e5" + "db1a68629f9408fd95e5dbd819380435bbad52c66746baabcc037ef6076cf215ecab264159bbbd922ae57a4890599f657dacc5a09d56785f08f7adad54e974d1" ], "split_commitment": null } ], "split_commitment_root": { - "hash": "6f81441e4f801c3886d26f242f2c73ead3f5a3793b3d6fe25611e0fad4ff2d70", + "hash": "c96ba1c3534f04149b2480923fc13d0e55e5251c01610317d48e1f0e7b9d2195", "sum": "1500" }, "script_version": 0, - "script_key": "025bb648c78867c438cc7e8ce4793f74faf242fcbf668bf337fe04c637f60d5075", - "group_key": null + "script_key": "02adc1cf482226b3c4d0fac399e97302f4d7260f4ba782cd9cfbdb3c7ce94cd1e4", + "group_key": null, + "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da", + "internal_key": "03f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", - "version": 2 - } + "proof": "0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, "exclusion_proofs": [ { "output_index": 1, - "internal_key": "02559473084f585d68da4381097d03c017d4dbf20de346d5afc3922f30529f64bf", + "internal_key": "03687c05eb0dade4141769314d1fe89ac712b1c6de66a228110189bd3b278f0fe9", "commitment_proof": { "proof": { "asset_proof": { - "proof": "0001d095e70612084951016728e9ebaddfd4e3765281640f57b313603e91672af73500000000000004b0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "proof": "0001b44d27361609c463ec20dfa02d1fd2c489254ad82c6385ea29521553f1754b4600000000000004b0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2 - } + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, { "output_index": 2, - "internal_key": "022fd7f0a1c0f430c25bd80f5b4a8b6046aa3c2a903568f766c8b0f503306fe079", + "internal_key": "026019f70d187fdb882da16113e08014f667d05980997df3abd39bb322801b834b", "commitment_proof": null, "tapscript_proof": { "tap_preimage_1": "", "tap_preimage_2": "", - "bip86": true - } + "bip86": true, + "unknown_odd_types": null + }, + "unknown_odd_types": null } ], "split_root_proof": null, @@ -200,14 +224,16 @@ "additional_inputs": null, "challenge_witness": null, "genesis_reveal": null, - "group_key_reveal": null + "group_key_reveal": null, + "alt_leaves": null, + "unknown_odd_types": null }, - "expected": "5441505000040000000002245d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc000000000450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096e88000000000000000006fd018c020000000001025d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc00000000000000000002ea532b7f6f10d7ef5878d4bdae9c96a8c966fbefa0efc5dfd4034c59791f5b00000000000000000003e80300000000000022512080f7611a166819aab42e0b797b236863212bf398af3be7849294d4552d415005e803000000000000225120f0f9a8294653152502b69b2cc9ca54bf673a54ea03e4c9c778b5f984d7d8afdca9d0f505000000002251207e1c0ef01b3c3f9eb31c48f50d93de832127a2ef9c4e3088a9815da1d2e11e780140ebda6810d4ca9d220f567fe311fee267c4ed4fb1d7557e0267adb464a20eb4d01a41d9b20cb5a3f3e16065868f4139b9a682b9fcc52d64395166549e12308aa902473044022078d102f8005037362c1979c10e7c3e26b4190f4e2fda4eb596ef812be9798a00022059033397057c166563ef31eb2020eef0db9a371f8184c153e15411cfd7a1f817012102aa22f29c13156c03e4dfba265716673c69942b866b50641e3268c58067eba7ec000000000801000afd01660001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd012c0bad01ab01655d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc000000003a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d303420140f40bdbc3d79e080ba95d04f8bdb785a28e8801705bb332dd5914ba683c401a9c25aa8851e4487e7f4b6d57e782542183b6622e1ee3d5953bbcb6d99e34ebb3e50d286f81441e4f801c3886d26f242f2c73ead3f5a3793b3d6fe25611e0fad4ff2d7000000000000005dc0e0200001021025bb648c78867c438cc7e8ce4793f74faf242fcbf668bf337fe04c637f60d50750cc70004000000000221037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da039c014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0df802c7000400000001022102559473084f585d68da4381097d03c017d4dbf20de346d5afc3922f30529f64bf039c017100010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba044a0001d095e70612084951016728e9ebaddfd4e3765281640f57b313603e91672af73500000000000004b0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e0004000000020221022fd7f0a1c0f430c25bd80f5b4a8b6046aa3c2a903568f766c8b0f503306fe0790503040101160400000000", + "expected": "5441505000040000000002244cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b000000000450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096e88000000000000000006fd018c020000000001024cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b000000000000000000062736a1f2dbc0332040eafe375e4922ace3da94f88ada2ce397e7914014a32500000000000000000003e8030000000000002251203efafc563c1ffb16afc844abe35e48ea0303bf8b03753c640da1924f81b79408e8030000000000002251208eb3db333954f26aa1eacd5f057b60a32c59987e0226b58dc8debb033bdee3e6a9d0f50500000000225120f09fc5609b3c82f778d27fe3f8e9b88a10edcebc7c35864940049991bf4445650140b4622c62287ae87d96fffa7fd34f58708b0d1e6f4ae5a85fc6705781dd92711129d9cd0e3774fdb0fa048d3bbc559dd3d8d76b84d56928025ef24ba0b1940a7d02473044022006229b6e9c59a1c5d68ced672808f075382b3b5c5bf44eb1c9e993593d4807c102206667b3a902f71aab2ddbaafe2cef32f1bde17da6522444e87fe1fd50d5aa90f20121025d3b26142dcb90504cbfbbbf70d92fc7579198ffe9bf497a3bf2c55df8925126000000000801000afd016600010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd012c0bad01ab01654cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b00000000898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c03420140db1a68629f9408fd95e5dbd819380435bbad52c66746baabcc037ef6076cf215ecab264159bbbd922ae57a4890599f657dacc5a09d56785f08f7adad54e974d10d28c96ba1c3534f04149b2480923fc13d0e55e5251c01610317d48e1f0e7b9d219500000000000005dc0e020000102102adc1cf482226b3c4d0fac399e97302f4d7260f4ba782cd9cfbdb3c7ce94cd1e40cc7000400000000022103f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a039c01490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf0df802c7000400000001022103687c05eb0dade4141769314d1fe89ac712b1c6de66a228110189bd3b278f0fe9039c01710001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0044a0001b44d27361609c463ec20dfa02d1fd2c489254ad82c6385ea29521553f1754b4600000000000004b0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e0004000000020221026019f70d187fdb882da16113e08014f667d05980997df3abd39bb322801b834b0503040101160400000000", "comment": "valid regtest proof for split root" }, { "proof": { - "prev_out": "bc9842a45bd691e081d0f25a9a1d770fd0563719e253a1700445c8b6fabf7a5d:0", + "prev_out": "2be239d331bc16887e14152ff0da00a7aa6e31899e965cb416440392e9f1d84c:0", "block_header": { "version": 0, "prev_block": "0000000000000000000000000000000000000000000000000000000000000000", @@ -217,14 +243,14 @@ "nonce": 0 }, "block_height": 0, - "anchor_tx": "020000000001025d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc00000000000000000002ea532b7f6f10d7ef5878d4bdae9c96a8c966fbefa0efc5dfd4034c59791f5b00000000000000000003e80300000000000022512080f7611a166819aab42e0b797b236863212bf398af3be7849294d4552d415005e803000000000000225120f0f9a8294653152502b69b2cc9ca54bf673a54ea03e4c9c778b5f984d7d8afdca9d0f505000000002251207e1c0ef01b3c3f9eb31c48f50d93de832127a2ef9c4e3088a9815da1d2e11e780140ebda6810d4ca9d220f567fe311fee267c4ed4fb1d7557e0267adb464a20eb4d01a41d9b20cb5a3f3e16065868f4139b9a682b9fcc52d64395166549e12308aa902473044022078d102f8005037362c1979c10e7c3e26b4190f4e2fda4eb596ef812be9798a00022059033397057c166563ef31eb2020eef0db9a371f8184c153e15411cfd7a1f817012102aa22f29c13156c03e4dfba265716673c69942b866b50641e3268c58067eba7ec00000000", + "anchor_tx": "020000000001024cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b000000000000000000062736a1f2dbc0332040eafe375e4922ace3da94f88ada2ce397e7914014a32500000000000000000003e8030000000000002251203efafc563c1ffb16afc844abe35e48ea0303bf8b03753c640da1924f81b79408e8030000000000002251208eb3db333954f26aa1eacd5f057b60a32c59987e0226b58dc8debb033bdee3e6a9d0f50500000000225120f09fc5609b3c82f778d27fe3f8e9b88a10edcebc7c35864940049991bf4445650140b4622c62287ae87d96fffa7fd34f58708b0d1e6f4ae5a85fc6705781dd92711129d9cd0e3774fdb0fa048d3bbc559dd3d8d76b84d56928025ef24ba0b1940a7d02473044022006229b6e9c59a1c5d68ced672808f075382b3b5c5bf44eb1c9e993593d4807c102206667b3a902f71aab2ddbaafe2cef32f1bde17da6522444e87fe1fd50d5aa90f20121025d3b26142dcb90504cbfbbbf70d92fc7579198ffe9bf497a3bf2c55df892512600000000", "tx_merkle_proof": { "nodes": [], "bits": [] }, "asset": { "version": 0, - "genesis_first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "genesis_first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "genesis_tag": "first-itestbuxx", "genesis_meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "genesis_output_index": 0, @@ -241,10 +267,10 @@ }, "tx_witness": null, "split_commitment": { - "proof": "00010be395fda464eddb62c4d473d9cb4acf0e76def5656efcac738fe6c7e04cceb1000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "proof": "00019f433ee26a1e6288bce58cbd0d77858201e55803f967db9e746197d059b1c422000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", "root_asset": { "version": 0, - "genesis_first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "genesis_first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "genesis_tag": "first-itestbuxx", "genesis_meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "genesis_output_index": 0, @@ -255,126 +281,147 @@ "prev_witnesses": [ { "prev_id": { - "out_point": "bc9842a45bd691e081d0f25a9a1d770fd0563719e253a1700445c8b6fabf7a5d:0", - "asset_id": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba", - "script_key": "027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d3" + "out_point": "2be239d331bc16887e14152ff0da00a7aa6e31899e965cb416440392e9f1d84c:0", + "asset_id": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "script_key": "025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c" }, "tx_witness": [ - "f40bdbc3d79e080ba95d04f8bdb785a28e8801705bb332dd5914ba683c401a9c25aa8851e4487e7f4b6d57e782542183b6622e1ee3d5953bbcb6d99e34ebb3e5" + "db1a68629f9408fd95e5dbd819380435bbad52c66746baabcc037ef6076cf215ecab264159bbbd922ae57a4890599f657dacc5a09d56785f08f7adad54e974d1" ], "split_commitment": null } ], "split_commitment_root": { - "hash": "6f81441e4f801c3886d26f242f2c73ead3f5a3793b3d6fe25611e0fad4ff2d70", + "hash": "c96ba1c3534f04149b2480923fc13d0e55e5251c01610317d48e1f0e7b9d2195", "sum": "1500" }, "script_version": 0, - "script_key": "025bb648c78867c438cc7e8ce4793f74faf242fcbf668bf337fe04c637f60d5075", - "group_key": null + "script_key": "02adc1cf482226b3c4d0fac399e97302f4d7260f4ba782cd9cfbdb3c7ce94cd1e4", + "group_key": null, + "unknown_odd_types": null } } } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02e8d229608c099e4bfea9e9861d3e2f4e4d43e9a4750b09458f26ff8953360c19", - "group_key": null + "script_key": "02e2356b87d6435363aaa7a763eeeb3818000527783c0c4ed72999a4853ef2a23b", + "group_key": null, + "unknown_odd_types": null }, "inclusion_proof": { "output_index": 1, - "internal_key": "02559473084f585d68da4381097d03c017d4dbf20de346d5afc3922f30529f64bf", + "internal_key": "03687c05eb0dade4141769314d1fe89ac712b1c6de66a228110189bd3b278f0fe9", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2 - } + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, "exclusion_proofs": [ { "output_index": 0, - "internal_key": "037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da", + "internal_key": "03f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a", "commitment_proof": { "proof": { "asset_proof": { - "proof": "0001f83c821ff57a84513a93118f5220aee193be9a7f1797296bd59e640807ff7fe8000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "proof": "00016201f1a088494f6a5b061a15c62c509b5a9f412bc067f6bb279c5597ea97cecf000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", - "version": 2 - } + "proof": "0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, { "output_index": 2, - "internal_key": "022fd7f0a1c0f430c25bd80f5b4a8b6046aa3c2a903568f766c8b0f503306fe079", + "internal_key": "026019f70d187fdb882da16113e08014f667d05980997df3abd39bb322801b834b", "commitment_proof": null, "tapscript_proof": { "tap_preimage_1": "", "tap_preimage_2": "", - "bip86": true - } + "bip86": true, + "unknown_odd_types": null + }, + "unknown_odd_types": null } ], "split_root_proof": { "output_index": 0, - "internal_key": "037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da", + "internal_key": "03f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", - "version": 2 - } + "proof": "0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, "meta_reveal": null, "additional_inputs": null, "challenge_witness": null, "genesis_reveal": null, - "group_key_reveal": null + "group_key_reveal": null, + "alt_leaves": null, + "unknown_odd_types": null }, - "expected": "5441505000040000000002245d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc000000000450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096e88000000000000000006fd018c020000000001025d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc00000000000000000002ea532b7f6f10d7ef5878d4bdae9c96a8c966fbefa0efc5dfd4034c59791f5b00000000000000000003e80300000000000022512080f7611a166819aab42e0b797b236863212bf398af3be7849294d4552d415005e803000000000000225120f0f9a8294653152502b69b2cc9ca54bf673a54ea03e4c9c778b5f984d7d8afdca9d0f505000000002251207e1c0ef01b3c3f9eb31c48f50d93de832127a2ef9c4e3088a9815da1d2e11e780140ebda6810d4ca9d220f567fe311fee267c4ed4fb1d7557e0267adb464a20eb4d01a41d9b20cb5a3f3e16065868f4139b9a682b9fcc52d64395166549e12308aa902473044022078d102f8005037362c1979c10e7c3e26b4190f4e2fda4eb596ef812be9798a00022059033397057c166563ef31eb2020eef0db9a371f8184c153e15411cfd7a1f817012102aa22f29c13156c03e4dfba265716673c69942b866b50641e3268c58067eba7ec000000000801000afd02b40001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd04b00bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a00010be395fda464eddb62c4d473d9cb4acf0e76def5656efcac738fe6c7e04cceb1000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd01660001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd012c0bad01ab01655d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc000000003a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d303420140f40bdbc3d79e080ba95d04f8bdb785a28e8801705bb332dd5914ba683c401a9c25aa8851e4487e7f4b6d57e782542183b6622e1ee3d5953bbcb6d99e34ebb3e50d286f81441e4f801c3886d26f242f2c73ead3f5a3793b3d6fe25611e0fad4ff2d7000000000000005dc0e0200001021025bb648c78867c438cc7e8ce4793f74faf242fcbf668bf337fe04c637f60d50750e020000102102e8d229608c099e4bfea9e9861d3e2f4e4d43e9a4750b09458f26ff8953360c190c9f000400000001022102559473084f585d68da4381097d03c017d4dbf20de346d5afc3922f30529f64bf0374014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0dfd012002ef0004000000000221037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da03c4017100010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba044a0001f83c821ff57a84513a93118f5220aee193be9a7f1797296bd59e640807ff7fe8000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f024f000102024a000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f2e0004000000020221022fd7f0a1c0f430c25bd80f5b4a8b6046aa3c2a903568f766c8b0f503306fe07905030401010fc70004000000000221037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da039c014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f160400000000", + "expected": "5441505000040000000002244cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b000000000450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096e88000000000000000006fd018c020000000001024cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b000000000000000000062736a1f2dbc0332040eafe375e4922ace3da94f88ada2ce397e7914014a32500000000000000000003e8030000000000002251203efafc563c1ffb16afc844abe35e48ea0303bf8b03753c640da1924f81b79408e8030000000000002251208eb3db333954f26aa1eacd5f057b60a32c59987e0226b58dc8debb033bdee3e6a9d0f50500000000225120f09fc5609b3c82f778d27fe3f8e9b88a10edcebc7c35864940049991bf4445650140b4622c62287ae87d96fffa7fd34f58708b0d1e6f4ae5a85fc6705781dd92711129d9cd0e3774fdb0fa048d3bbc559dd3d8d76b84d56928025ef24ba0b1940a7d02473044022006229b6e9c59a1c5d68ced672808f075382b3b5c5bf44eb1c9e993593d4807c102206667b3a902f71aab2ddbaafe2cef32f1bde17da6522444e87fe1fd50d5aa90f20121025d3b26142dcb90504cbfbbbf70d92fc7579198ffe9bf497a3bf2c55df8925126000000000801000afd02b400010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd04b00bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a00019f433ee26a1e6288bce58cbd0d77858201e55803f967db9e746197d059b1c422000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffd016600010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd012c0bad01ab01654cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b00000000898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c03420140db1a68629f9408fd95e5dbd819380435bbad52c66746baabcc037ef6076cf215ecab264159bbbd922ae57a4890599f657dacc5a09d56785f08f7adad54e974d10d28c96ba1c3534f04149b2480923fc13d0e55e5251c01610317d48e1f0e7b9d219500000000000005dc0e020000102102adc1cf482226b3c4d0fac399e97302f4d7260f4ba782cd9cfbdb3c7ce94cd1e40e020000102102e2356b87d6435363aaa7a763eeeb3818000527783c0c4ed72999a4853ef2a23b0c9f000400000001022103687c05eb0dade4141769314d1fe89ac712b1c6de66a228110189bd3b278f0fe9037401490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0dfd012002ef000400000000022103f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a03c401710001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0044a00016201f1a088494f6a5b061a15c62c509b5a9f412bc067f6bb279c5597ea97cecf000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf024f000102024a0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf2e0004000000020221026019f70d187fdb882da16113e08014f667d05980997df3abd39bb322801b834b05030401010fc7000400000000022103f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a039c01490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf160400000000", "comment": "valid regtest split proof" }, { "proof": { - "prev_out": "205b185906c1592b987230f2342b261ced44960fa48635a9fb0fdde12e2f564e:1", + "prev_out": "9b8e1b77f8dd96171defee350330f075e13d15ad3a2e6f66d6d45250edfd4641:1", "block_header": { "version": 541065216, - "prev_block": "6433f4ca4a2d073fbb1e249e8c2512f9f5698926671198030cf290ef584f9e51", - "merkle_root": "e935b5865553101dfb933c057a1ddc54f73411862f5955340b84b93eeb5d5b1a", - "timestamp": 1718210324, + "prev_block": "6e3216d33065117fd21808e13bb7f4e97d2df965400ace33ce8ad2f9d6cdb7f8", + "merkle_root": "27b1568a6de74bcf03dab3c8057c773de13e158c917627870484ec88bae7cba8", + "timestamp": 1733521992, "bits": 545259519, "nonce": 0 }, - "block_height": 444, - "anchor_tx": "020000000001024e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b2001000000000000000000a1bf3e166c4ff2bc66a96d790faeabea483253f567d3443aca0f180543c6db00000000000000000003e80300000000000022512075131c90f4b84779e2de16cbcb7f330d1bd7ba27fc6027989f1ba565979d6e0ae803000000000000225120d368a69b3afee1d309c119524dc32720f00ed4eef8683236f8a8b8f57a51f557a9d0f505000000002251206cc80644acf5c9238d1beb9a693a621d042be142970c5b1d83b17294983ba631014012c896ab0645874d1f8c4686d7f3d2a5147ac80e0f38d059d465d71fac8bc0fc23f2963ac25c3e04cb1042034a3401c1163d86844b2f178ae679953433db68f40247304402205d59efe6a78355126c9c507fdd6fa608bed41760f922ae68be60ad201c11025a02200222aee2e48102a25a8581e91a6c6298a64f8efffbc6a319a0e263129f1305f90121037b23df1197e5e8a5745ad17f6f155b495c62009c1ada247533758895f31d19b500000000", + "block_height": 446, + "anchor_tx": "020000000001024146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b0100000000000000007a6aed31fe675df9f3cbb30ec93c6aa64c0357ee95e041b68209dd0405126ea100000000000000000003e803000000000000225120b39d40166eab936be97ba489bd3e0b804fbd3c405b6b4dd853a7ecd645c7b8c9e803000000000000225120c439941c12ce99347f4a629a938835f2cdd7cc2646da97f18c52b4f17a18b0f4a9d0f505000000002251208ea64fa1adc917b9a9f7b6f4d671faa71a3ce538e4d22f2bc7696b2228448a2801400a89ab38452e2851d9b8a8faa24078d5517588fa2c857a2b4be65c0ac56631771139a245721a0b70e75e0c33a6eec16ee1d540c00489c8321569edc4e0d3e57f02473044022053b3677ee4a83b5b64d25f6c9f6d03a6678f2daeecad0966b7f1bfcb43f86b6a022041be57f3ca6ce364e28ae4991633ba9a4198f2a8ecd4489e4e1998cd447d8ff3012102dd95677d998373268ea2e0fd1a9bdd62e74eaee0db36ae080957c8f4732448c400000000", "tx_merkle_proof": { "nodes": [ - "1d573ef2fc035cc9fe16f9c7c6aef2a8ba8786f675111ff754e8c8efdcfcc259" + "253153c75426a337a3a39e660e3d5d3a7a2943596ff1e53c8910ad5cad738656" ], "bits": [ false @@ -382,7 +429,7 @@ }, "asset": { "version": 0, - "genesis_first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "genesis_first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "genesis_tag": "first-itestbuxx", "genesis_meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "genesis_output_index": 0, @@ -399,10 +446,10 @@ }, "tx_witness": null, "split_commitment": { - "proof": "00011f24c5895600bc6d8b0f0460f4ffc37d35d39530c8aca99449ecfaa5765fd18e0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "proof": "000171eba4c1f1a64d5342c68cfcfce96a3332c936824f676cc047db8c79bf24f8ba0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", "root_asset": { "version": 0, - "genesis_first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "genesis_first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "genesis_tag": "first-itestbuxx", "genesis_meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "genesis_output_index": 0, @@ -413,128 +460,149 @@ "prev_witnesses": [ { "prev_id": { - "out_point": "205b185906c1592b987230f2342b261ced44960fa48635a9fb0fdde12e2f564e:1", - "asset_id": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba", - "script_key": "02e8d229608c099e4bfea9e9861d3e2f4e4d43e9a4750b09458f26ff8953360c19" + "out_point": "9b8e1b77f8dd96171defee350330f075e13d15ad3a2e6f66d6d45250edfd4641:1", + "asset_id": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "script_key": "02e2356b87d6435363aaa7a763eeeb3818000527783c0c4ed72999a4853ef2a23b" }, "tx_witness": [ - "d64b676bfd4acbac4be655fe2e5aa00308b5b28f0eb249f42ccf738ed60f3d84067f048a0ba782d2bd35d1503af8959ae5ef8b822da04b25444e60f022674e19" + "62f411bf03948cb3ca8a887a6449b1b99f93458e1c2f837ec20c7759461ad433bdeb43fc3abf29cde2cb2680e3f1c7a5ac60dc5833042ed31067f80c57b28537" ], "split_commitment": null } ], "split_commitment_root": { - "hash": "3ffad0e49b5b7d302f18c8a97cdf265df22c0b648630a5642f8a04103cf36a7a", + "hash": "94c638977dfebc6426564611a74aedddb57c7664e9278213cfcce97de38733f0", "sum": "1200" }, "script_version": 0, - "script_key": "024ad828457a32c78c4a3d4bb2fe0fe4d6f885bb2dc42919b6a7c7d811d8200668", - "group_key": null + "script_key": "0273567b487064507c8bb16c912e8ec608bf09f2d461a89bfe63c37a7b3fdd21fa", + "group_key": null, + "unknown_odd_types": null } } } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02599267c0f1f9c3c3824aced092d97fb56dc255a40580137d4924ca3376c29a1e", - "group_key": null + "script_key": "02550807e261f1add28272dd1dc99979f7bb0e87982c296d52d7b58fba2c1a68e4", + "group_key": null, + "unknown_odd_types": null }, "inclusion_proof": { "output_index": 1, - "internal_key": "037285f36ae2e1e52d9337ec496aaf9a56386251fcf8b40457d3e0735e484d1797", + "internal_key": "026f8944cb3cc0e077dedfbe312cbe6071861bec5cdc055ff6fe7fe26f5a5b8357", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2 - } + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, "exclusion_proofs": [ { "output_index": 0, - "internal_key": "02c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c14", + "internal_key": "028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f", "commitment_proof": { "proof": { "asset_proof": { - "proof": "000188690bb0b1cffaa13b6b29bf686defe11ddc3e9798aff36eeb9509af3dc31fc30000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "proof": "00014c598c9376185fd1dfb86659a5c3675bab19595cf1abf5a1cc7b7dc887d607cf0000000000000258fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2 - } + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, { "output_index": 2, - "internal_key": "0265f90d4a24fd1d2c66d2da48b1da96d3b21222c41b1bb08b08b2a1fa2d03a290", + "internal_key": "027e12e36f36b1b39f15cf888cc4ec443dea1f07082fb35ea2f2d170c782687e73", "commitment_proof": null, "tapscript_proof": { "tap_preimage_1": "", "tap_preimage_2": "", - "bip86": true - } + "bip86": true, + "unknown_odd_types": null + }, + "unknown_odd_types": null } ], "split_root_proof": { "output_index": 0, - "internal_key": "02c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c14", + "internal_key": "028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2 - } + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, "meta_reveal": null, "additional_inputs": null, "challenge_witness": [ - "c23141fb15d0ce13e08e36951834d90bf86defbbd6e5145f503560cd21af42b2586419075f4700413336712ca87a3c376bb4bbf78646979921d84a6859d2e1f0" + "5a9d3325ceddab77bbb43583930ab428d76c89b11b3af6fe4e97daee4c4eb34422c1d8e9e67bfde1d3b1a8bfeb8ec7e458ffe0e4f8b9f2faf1ad946e43b6a9ec" ], "genesis_reveal": null, - "group_key_reveal": null + "group_key_reveal": null, + "alt_leaves": null, + "unknown_odd_types": null }, - "expected": "5441505000040000000002244e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b2000000001045000004020519e4f58ef90f20c03981167268969f5f912258c9e241ebb3f072d4acaf433641a5b5deb3eb9840b3455592f861134f754dc1d7a053c93fb1d10535586b535e914cf6966ffff7f200000000006fd018c020000000001024e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b2001000000000000000000a1bf3e166c4ff2bc66a96d790faeabea483253f567d3443aca0f180543c6db00000000000000000003e80300000000000022512075131c90f4b84779e2de16cbcb7f330d1bd7ba27fc6027989f1ba565979d6e0ae803000000000000225120d368a69b3afee1d309c119524dc32720f00ed4eef8683236f8a8b8f57a51f557a9d0f505000000002251206cc80644acf5c9238d1beb9a693a621d042be142970c5b1d83b17294983ba631014012c896ab0645874d1f8c4686d7f3d2a5147ac80e0f38d059d465d71fac8bc0fc23f2963ac25c3e04cb1042034a3401c1163d86844b2f178ae679953433db68f40247304402205d59efe6a78355126c9c507fdd6fa608bed41760f922ae68be60ad201c11025a02200222aee2e48102a25a8581e91a6c6298a64f8efffbc6a319a0e263129f1305f90121037b23df1197e5e8a5745ad17f6f155b495c62009c1ada247533758895f31d19b50000000008220159c2fcdcefc8e854f71f1175f68687baa8f2aec6c7f916fec95c03fcf23e571d000afd02b40001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a00011f24c5895600bc6d8b0f0460f4ffc37d35d39530c8aca99449ecfaa5765fd18e0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd01660001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bad01ab01654e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b20000000013a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba02e8d229608c099e4bfea9e9861d3e2f4e4d43e9a4750b09458f26ff8953360c1903420140d64b676bfd4acbac4be655fe2e5aa00308b5b28f0eb249f42ccf738ed60f3d84067f048a0ba782d2bd35d1503af8959ae5ef8b822da04b25444e60f022674e190d283ffad0e49b5b7d302f18c8a97cdf265df22c0b648630a5642f8a04103cf36a7a00000000000004b00e0200001021024ad828457a32c78c4a3d4bb2fe0fe4d6f885bb2dc42919b6a7c7d811d82006680e020000102102599267c0f1f9c3c3824aced092d97fb56dc255a40580137d4924ca3376c29a1e0c9f0004000000010221037285f36ae2e1e52d9337ec496aaf9a56386251fcf8b40457d3e0735e484d17970374014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0df802c7000400000000022102c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c14039c017100010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba044a000188690bb0b1cffaa13b6b29bf686defe11ddc3e9798aff36eeb9509af3dc31fc30000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e00040000000202210265f90d4a24fd1d2c66d2da48b1da96d3b21222c41b1bb08b08b2a1fa2d03a29005030401010f9f000400000000022102c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c140374014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff15420140c23141fb15d0ce13e08e36951834d90bf86defbbd6e5145f503560cd21af42b2586419075f4700413336712ca87a3c376bb4bbf78646979921d84a6859d2e1f01604000001bc", + "expected": "5441505000040000000002244146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b00000001045000004020f8b7cdd6f9d28ace33ce0a4065f92d7de9f4b73be10818d27f116530d316326ea8cbe7ba88ec8404872776918c153ee13d777c05c8b3da03cf4be76d8a56b12748725367ffff7f200000000006fd018c020000000001024146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b0100000000000000007a6aed31fe675df9f3cbb30ec93c6aa64c0357ee95e041b68209dd0405126ea100000000000000000003e803000000000000225120b39d40166eab936be97ba489bd3e0b804fbd3c405b6b4dd853a7ecd645c7b8c9e803000000000000225120c439941c12ce99347f4a629a938835f2cdd7cc2646da97f18c52b4f17a18b0f4a9d0f505000000002251208ea64fa1adc917b9a9f7b6f4d671faa71a3ce538e4d22f2bc7696b2228448a2801400a89ab38452e2851d9b8a8faa24078d5517588fa2c857a2b4be65c0ac56631771139a245721a0b70e75e0c33a6eec16ee1d540c00489c8321569edc4e0d3e57f02473044022053b3677ee4a83b5b64d25f6c9f6d03a6678f2daeecad0966b7f1bfcb43f86b6a022041be57f3ca6ce364e28ae4991633ba9a4198f2a8ecd4489e4e1998cd447d8ff3012102dd95677d998373268ea2e0fd1a9bdd62e74eaee0db36ae080957c8f4732448c400000000082201568673ad5cad10893ce5f16f5943297a3a5d3d0e669ea3a337a32654c7533125000afd02b400010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a000171eba4c1f1a64d5342c68cfcfce96a3332c936824f676cc047db8c79bf24f8ba0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd016600010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bad01ab01654146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b00000001898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd002e2356b87d6435363aaa7a763eeeb3818000527783c0c4ed72999a4853ef2a23b0342014062f411bf03948cb3ca8a887a6449b1b99f93458e1c2f837ec20c7759461ad433bdeb43fc3abf29cde2cb2680e3f1c7a5ac60dc5833042ed31067f80c57b285370d2894c638977dfebc6426564611a74aedddb57c7664e9278213cfcce97de38733f000000000000004b00e02000010210273567b487064507c8bb16c912e8ec608bf09f2d461a89bfe63c37a7b3fdd21fa0e020000102102550807e261f1add28272dd1dc99979f7bb0e87982c296d52d7b58fba2c1a68e40c9f0004000000010221026f8944cb3cc0e077dedfbe312cbe6071861bec5cdc055ff6fe7fe26f5a5b8357037401490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0df802c70004000000000221028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f039c01710001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0044a00014c598c9376185fd1dfb86659a5c3675bab19595cf1abf5a1cc7b7dc887d607cf0000000000000258fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e0004000000020221027e12e36f36b1b39f15cf888cc4ec443dea1f07082fb35ea2f2d170c782687e7305030401010f9f0004000000000221028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f037401490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff154201405a9d3325ceddab77bbb43583930ab428d76c89b11b3af6fe4e97daee4c4eb34422c1d8e9e67bfde1d3b1a8bfeb8ec7e458ffe0e4f8b9f2faf1ad946e43b6a9ec1604000001be", "comment": "valid regtest ownership proof" }, { "proof": { - "prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "block_header": { "version": 541065216, - "prev_block": "37fefb3f5638d1d8e141c104c5e8f37eaa1eebc06ec94b969b66535a390a1820", - "merkle_root": "5ae3e1ea8d5d2287ddd72c62e18d9a7ed07d89134df43e208ef5fc4345e11eb5", - "timestamp": 1718210324, + "prev_block": "3b35e1d5fd335c30dd04b42ca34313d056f1c92a522e7507241e08e284aa8f9a", + "merkle_root": "bd23d82c26f969d400b6ecc18ae808d641e617e655505e590b7a39eb9f862099", + "timestamp": 1733521991, "bits": 545259519, "nonce": 0 }, - "block_height": 441, - "anchor_tx": "02000000000101003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc900000000000000000002e803000000000000225120fe832c770281a91714ef09391d7ecfdd3dcad62150300574b48d6d55faacde025fd5f50500000000225120e714c655906329de4e32ba6f5ba1976e0cef60196e4e8f3ba52165ec9e7e16b702483045022100a23554aa6bc76c4fd6fcd250434f7e21546acf54a0678b65a4be0f3aab54b5ad02201c9f68043649eea30696221e18948dc3cdfa301438b6842c3c6d5ab1ee615acb0121022d5d9be9be7994d8941dfe7397d6a40207b2303bfae2cc0c0651740fd8b729ae00000000", + "block_height": 443, + "anchor_tx": "020000000001010028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e4700000000000000000002e8030000000000002251201de5c42c8a8b746e8546333f77af17351aacab80ad69bccb38c80bce6e9b8bef5fd5f5050000000022512007138e14f350280a1d8ddee3269e63475c460ec569f92c4e0a8d4699bf41f4bb0247304402204f36d4142a0766b659ad3de205cd6f6b2ff9799d2ba9678150a3d1dbfc81d2f602201ea43dbfa55ab6d603b89aae66751b3c0c858d0b1982bd38403b29d95bdfdb1a0121022a00c959d98510b311dec09ad2214f1267edfdea434a491d33f837192617c36400000000", "tx_merkle_proof": { "nodes": [ - "532486297436a8a787143c8fd68e07df248733d2af04ce40edcfc9909a12a59a" + "398b065a877db464f6daf462f12caf4883169b8dd02540edf4e4ccc18cb76376" ], "bits": [ false @@ -542,7 +610,7 @@ }, "asset": { "version": 0, - "genesis_first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "genesis_first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "genesis_tag": "first-itestbuxx", "genesis_meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "genesis_output_index": 0, @@ -563,75 +631,86 @@ ], "split_commitment_root": null, "script_version": 0, - "script_key": "027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d3", - "group_key": null + "script_key": "025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c", + "group_key": null, + "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "0345a9e7176b16f12a760cee94c02ebad7560651a715829df439e858654ad60c2c", + "internal_key": "0352a78f4268168a1219a30bb96ce37e5a73d6175a336947fa7376661667805e0a", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "0001aab8488a8e9822fce155021aa404d475282ee4839bba9a981032d7e2e3d1d7d800000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", - "version": 2 - } + "proof": "0001076553d07d1e80b22b6852656e98b3f090db89de729e0389bdd654050635ae4500000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, "exclusion_proofs": [ { "output_index": 1, - "internal_key": "02b0e7bde9386a96241c92086817b7299e598e633c360d396731ef734813010902", + "internal_key": "02773d842605766a0803e2ac601310b43cd2acbecd951a4910a915e8943e53ecb5", "commitment_proof": null, "tapscript_proof": { "tap_preimage_1": "", "tap_preimage_2": "", - "bip86": true - } + "bip86": true, + "unknown_odd_types": null + }, + "unknown_odd_types": null } ], "split_root_proof": null, "meta_reveal": { "type": 0, - "data": "69746573742d6d65746164617461" + "data": "69746573742d6d65746164617461", + "unknown_odd_types": null }, "additional_inputs": null, "challenge_witness": null, "genesis_reveal": { - "first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "tag": "first-itestbuxx", "meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "output_index": 0, "type": 0 }, - "group_key_reveal": null + "group_key_reveal": null, + "alt_leaves": null, + "unknown_odd_types": null }, - "expected": "544150500004000000000224003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc90000000004500000402020180a395a53669b964bc96ec0eb1eaa7ef3e8c504c141e1d8d138563ffbfe37b51ee14543fcf58e203ef44d13897dd07e9a8de1622cd7dd87225d8deae1e35a14cf6966ffff7f200000000006f702000000000101003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc900000000000000000002e803000000000000225120fe832c770281a91714ef09391d7ecfdd3dcad62150300574b48d6d55faacde025fd5f50500000000225120e714c655906329de4e32ba6f5ba1976e0cef60196e4e8f3ba52165ec9e7e16b702483045022100a23554aa6bc76c4fd6fcd250434f7e21546acf54a0678b65a4be0f3aab54b5ad02201c9f68043649eea30696221e18948dc3cdfa301438b6842c3c6d5ab1ee615acb0121022d5d9be9be7994d8941dfe7397d6a40207b2303bfae2cc0c0651740fd8b729ae000000000822019aa5129a90c9cfed40ce04afd2338724df078ed68f3c1487a7a8367429862453000af80001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd05dc0b690167016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0200001021027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d30cc700040000000002210345a9e7176b16f12a760cee94c02ebad7560651a715829df439e858654ad60c2c039c014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001aab8488a8e9822fce155021aa404d475282ee4839bba9a981032d7e2e3d1d7d800000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f0d30012e000400000001022102b0e7bde9386a96241c92086817b7299e598e633c360d396731ef73481301090205030401011113000100020e69746573742d6d657461646174611604000001b91759003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea0000000000", + "expected": "5441505000040000000002240028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000450000040209a8faa84e2081e2407752e522ac9f156d01343a32cb404dd305c33fdd5e1353b9920869feb397a0b595e5055e617e641d608e88ac1ecb600d469f9262cd823bd47725367ffff7f200000000006f6020000000001010028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e4700000000000000000002e8030000000000002251201de5c42c8a8b746e8546333f77af17351aacab80ad69bccb38c80bce6e9b8bef5fd5f5050000000022512007138e14f350280a1d8ddee3269e63475c460ec569f92c4e0a8d4699bf41f4bb0247304402204f36d4142a0766b659ad3de205cd6f6b2ff9799d2ba9678150a3d1dbfc81d2f602201ea43dbfa55ab6d603b89aae66751b3c0c858d0b1982bd38403b29d95bdfdb1a0121022a00c959d98510b311dec09ad2214f1267edfdea434a491d33f837192617c364000000000822017663b78cc1cce4f4ed4025d08d9b168348af2cf162f4daf664b47d875a068b39000af800010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd05dc0b690167016500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0200001021025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c0cc700040000000002210352a78f4268168a1219a30bb96ce37e5a73d6175a336947fa7376661667805e0a039c01490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001076553d07d1e80b22b6852656e98b3f090db89de729e0389bdd654050635ae4500000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf0d30012e000400000001022102773d842605766a0803e2ac601310b43cd2acbecd951a4910a915e8943e53ecb505030401011113000100020e69746573742d6d657461646174611604000001bb17590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea0000000000", "comment": "valid regtest proof file index 0" }, { "proof": { - "prev_out": "bc9842a45bd691e081d0f25a9a1d770fd0563719e253a1700445c8b6fabf7a5d:0", + "prev_out": "2be239d331bc16887e14152ff0da00a7aa6e31899e965cb416440392e9f1d84c:0", "block_header": { "version": 541065216, - "prev_block": "3ad4481df82ebaa3b59528787f58f8e23f258d2e39bf491d915fef1abb9fd894", - "merkle_root": "d752fa290fc2ccd4b730a1db8882a00ed4150d6a6d0c764f3b62d1e1dafa2afc", - "timestamp": 1718210324, + "prev_block": "4dd6b9ddde034e8e52c3bb87c89c122ebd4218dbe59cf04628e922a9157703db", + "merkle_root": "d436faeefca8d43f5d5392ac766ebe6f637546fe838754021efe6217eff72be8", + "timestamp": 1733521991, "bits": 545259519, - "nonce": 2 + "nonce": 1 }, - "block_height": 442, - "anchor_tx": "020000000001025d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc00000000000000000002ea532b7f6f10d7ef5878d4bdae9c96a8c966fbefa0efc5dfd4034c59791f5b00000000000000000003e80300000000000022512080f7611a166819aab42e0b797b236863212bf398af3be7849294d4552d415005e803000000000000225120f0f9a8294653152502b69b2cc9ca54bf673a54ea03e4c9c778b5f984d7d8afdca9d0f505000000002251207e1c0ef01b3c3f9eb31c48f50d93de832127a2ef9c4e3088a9815da1d2e11e780140ebda6810d4ca9d220f567fe311fee267c4ed4fb1d7557e0267adb464a20eb4d01a41d9b20cb5a3f3e16065868f4139b9a682b9fcc52d64395166549e12308aa902473044022078d102f8005037362c1979c10e7c3e26b4190f4e2fda4eb596ef812be9798a00022059033397057c166563ef31eb2020eef0db9a371f8184c153e15411cfd7a1f817012102aa22f29c13156c03e4dfba265716673c69942b866b50641e3268c58067eba7ec00000000", + "block_height": 444, + "anchor_tx": "020000000001024cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b000000000000000000062736a1f2dbc0332040eafe375e4922ace3da94f88ada2ce397e7914014a32500000000000000000003e8030000000000002251203efafc563c1ffb16afc844abe35e48ea0303bf8b03753c640da1924f81b79408e8030000000000002251208eb3db333954f26aa1eacd5f057b60a32c59987e0226b58dc8debb033bdee3e6a9d0f50500000000225120f09fc5609b3c82f778d27fe3f8e9b88a10edcebc7c35864940049991bf4445650140b4622c62287ae87d96fffa7fd34f58708b0d1e6f4ae5a85fc6705781dd92711129d9cd0e3774fdb0fa048d3bbc559dd3d8d76b84d56928025ef24ba0b1940a7d02473044022006229b6e9c59a1c5d68ced672808f075382b3b5c5bf44eb1c9e993593d4807c102206667b3a902f71aab2ddbaafe2cef32f1bde17da6522444e87fe1fd50d5aa90f20121025d3b26142dcb90504cbfbbbf70d92fc7579198ffe9bf497a3bf2c55df892512600000000", "tx_merkle_proof": { "nodes": [ - "398d38bccc744e9367978a705a66145c5893ef20a2ea49347c8402d3aeeb38ba" + "c2ee73aa535a0a57b958ba0778c184cdf5123bd77fd5bbf6caac5e42e7c305da" ], "bits": [ false @@ -639,7 +718,7 @@ }, "asset": { "version": 0, - "genesis_first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "genesis_first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "genesis_tag": "first-itestbuxx", "genesis_meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "genesis_output_index": 0, @@ -656,10 +735,10 @@ }, "tx_witness": null, "split_commitment": { - "proof": "00010be395fda464eddb62c4d473d9cb4acf0e76def5656efcac738fe6c7e04cceb1000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "proof": "00019f433ee26a1e6288bce58cbd0d77858201e55803f967db9e746197d059b1c422000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", "root_asset": { "version": 0, - "genesis_first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "genesis_first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "genesis_tag": "first-itestbuxx", "genesis_meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "genesis_output_index": 0, @@ -670,126 +749,147 @@ "prev_witnesses": [ { "prev_id": { - "out_point": "bc9842a45bd691e081d0f25a9a1d770fd0563719e253a1700445c8b6fabf7a5d:0", - "asset_id": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba", - "script_key": "027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d3" + "out_point": "2be239d331bc16887e14152ff0da00a7aa6e31899e965cb416440392e9f1d84c:0", + "asset_id": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "script_key": "025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c" }, "tx_witness": [ - "f40bdbc3d79e080ba95d04f8bdb785a28e8801705bb332dd5914ba683c401a9c25aa8851e4487e7f4b6d57e782542183b6622e1ee3d5953bbcb6d99e34ebb3e5" + "db1a68629f9408fd95e5dbd819380435bbad52c66746baabcc037ef6076cf215ecab264159bbbd922ae57a4890599f657dacc5a09d56785f08f7adad54e974d1" ], "split_commitment": null } ], "split_commitment_root": { - "hash": "6f81441e4f801c3886d26f242f2c73ead3f5a3793b3d6fe25611e0fad4ff2d70", + "hash": "c96ba1c3534f04149b2480923fc13d0e55e5251c01610317d48e1f0e7b9d2195", "sum": "1500" }, "script_version": 0, - "script_key": "025bb648c78867c438cc7e8ce4793f74faf242fcbf668bf337fe04c637f60d5075", - "group_key": null + "script_key": "02adc1cf482226b3c4d0fac399e97302f4d7260f4ba782cd9cfbdb3c7ce94cd1e4", + "group_key": null, + "unknown_odd_types": null } } } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02e8d229608c099e4bfea9e9861d3e2f4e4d43e9a4750b09458f26ff8953360c19", - "group_key": null + "script_key": "02e2356b87d6435363aaa7a763eeeb3818000527783c0c4ed72999a4853ef2a23b", + "group_key": null, + "unknown_odd_types": null }, "inclusion_proof": { "output_index": 1, - "internal_key": "02559473084f585d68da4381097d03c017d4dbf20de346d5afc3922f30529f64bf", + "internal_key": "03687c05eb0dade4141769314d1fe89ac712b1c6de66a228110189bd3b278f0fe9", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2 - } + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, "exclusion_proofs": [ { "output_index": 0, - "internal_key": "037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da", + "internal_key": "03f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a", "commitment_proof": { "proof": { "asset_proof": { - "proof": "0001f83c821ff57a84513a93118f5220aee193be9a7f1797296bd59e640807ff7fe8000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "proof": "00016201f1a088494f6a5b061a15c62c509b5a9f412bc067f6bb279c5597ea97cecf000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", - "version": 2 - } + "proof": "0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, { "output_index": 2, - "internal_key": "022fd7f0a1c0f430c25bd80f5b4a8b6046aa3c2a903568f766c8b0f503306fe079", + "internal_key": "026019f70d187fdb882da16113e08014f667d05980997df3abd39bb322801b834b", "commitment_proof": null, "tapscript_proof": { "tap_preimage_1": "", "tap_preimage_2": "", - "bip86": true - } + "bip86": true, + "unknown_odd_types": null + }, + "unknown_odd_types": null } ], "split_root_proof": { "output_index": 0, - "internal_key": "037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da", + "internal_key": "03f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { - "proof": "000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", - "version": 2 - } + "proof": "0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf", + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, "meta_reveal": null, "additional_inputs": null, "challenge_witness": null, "genesis_reveal": null, - "group_key_reveal": null + "group_key_reveal": null, + "alt_leaves": null, + "unknown_odd_types": null }, - "expected": "5441505000040000000002245d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc0000000004500000402094d89fbb1aef5f911d49bf392e8d253fe2f8587f782895b5a3ba2ef81d48d43afc2afadae1d1623b4f760c6d6a0d15d40ea08288dba130b7d4ccc20f29fa52d714cf6966ffff7f200200000006fd018c020000000001025d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc00000000000000000002ea532b7f6f10d7ef5878d4bdae9c96a8c966fbefa0efc5dfd4034c59791f5b00000000000000000003e80300000000000022512080f7611a166819aab42e0b797b236863212bf398af3be7849294d4552d415005e803000000000000225120f0f9a8294653152502b69b2cc9ca54bf673a54ea03e4c9c778b5f984d7d8afdca9d0f505000000002251207e1c0ef01b3c3f9eb31c48f50d93de832127a2ef9c4e3088a9815da1d2e11e780140ebda6810d4ca9d220f567fe311fee267c4ed4fb1d7557e0267adb464a20eb4d01a41d9b20cb5a3f3e16065868f4139b9a682b9fcc52d64395166549e12308aa902473044022078d102f8005037362c1979c10e7c3e26b4190f4e2fda4eb596ef812be9798a00022059033397057c166563ef31eb2020eef0db9a371f8184c153e15411cfd7a1f817012102aa22f29c13156c03e4dfba265716673c69942b866b50641e3268c58067eba7ec00000000082201ba38ebaed302847c3449eaa220ef93585c14665a708a9767934e74ccbc388d39000afd02b40001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd04b00bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a00010be395fda464eddb62c4d473d9cb4acf0e76def5656efcac738fe6c7e04cceb1000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd01660001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd012c0bad01ab01655d7abffab6c8450470a153e2193756d00f771d9a5af2d081e091d65ba44298bc000000003a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba027aa5eed021fe1571a6f9930596bf1f4d6973730b47eb93356436ebe6463d63d303420140f40bdbc3d79e080ba95d04f8bdb785a28e8801705bb332dd5914ba683c401a9c25aa8851e4487e7f4b6d57e782542183b6622e1ee3d5953bbcb6d99e34ebb3e50d286f81441e4f801c3886d26f242f2c73ead3f5a3793b3d6fe25611e0fad4ff2d7000000000000005dc0e0200001021025bb648c78867c438cc7e8ce4793f74faf242fcbf668bf337fe04c637f60d50750e020000102102e8d229608c099e4bfea9e9861d3e2f4e4d43e9a4750b09458f26ff8953360c190c9f000400000001022102559473084f585d68da4381097d03c017d4dbf20de346d5afc3922f30529f64bf0374014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0dfd012002ef0004000000000221037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da03c4017100010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba044a0001f83c821ff57a84513a93118f5220aee193be9a7f1797296bd59e640807ff7fe8000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f024f000102024a000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f2e0004000000020221022fd7f0a1c0f430c25bd80f5b4a8b6046aa3c2a903568f766c8b0f503306fe07905030401010fc70004000000000221037fff46adefe0450dce0205b812bac42323eaf7f441e2871cac90d8724564f1da039c014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a000185064b96baa8c9686b6f5619f0beb4d5638201980f16eadf6e1144791fd219c700000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f1604000001ba", + "expected": "5441505000040000000002244cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b00000000045000004020db037715a922e92846f09ce5db1842bd2e129cc887bbc3528e4e03deddb9d64de82bf7ef1762fe1e02548783fe4675636fbe6e76ac92535d3fd4a8fceefa36d447725367ffff7f200100000006fd018c020000000001024cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b000000000000000000062736a1f2dbc0332040eafe375e4922ace3da94f88ada2ce397e7914014a32500000000000000000003e8030000000000002251203efafc563c1ffb16afc844abe35e48ea0303bf8b03753c640da1924f81b79408e8030000000000002251208eb3db333954f26aa1eacd5f057b60a32c59987e0226b58dc8debb033bdee3e6a9d0f50500000000225120f09fc5609b3c82f778d27fe3f8e9b88a10edcebc7c35864940049991bf4445650140b4622c62287ae87d96fffa7fd34f58708b0d1e6f4ae5a85fc6705781dd92711129d9cd0e3774fdb0fa048d3bbc559dd3d8d76b84d56928025ef24ba0b1940a7d02473044022006229b6e9c59a1c5d68ced672808f075382b3b5c5bf44eb1c9e993593d4807c102206667b3a902f71aab2ddbaafe2cef32f1bde17da6522444e87fe1fd50d5aa90f20121025d3b26142dcb90504cbfbbbf70d92fc7579198ffe9bf497a3bf2c55df892512600000000082201da05c3e7425eaccaf6bbd57fd73b12f5cd84c17807ba58b9570a5a53aa73eec2000afd02b400010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd04b00bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a00019f433ee26a1e6288bce58cbd0d77858201e55803f967db9e746197d059b1c422000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffd016600010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd012c0bad01ab01654cd8f1e992034416b45c969e89316eaaa700daf02f15147e8816bc31d339e22b00000000898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0025a5db7890fdd454db5d189d06880286b0d132c4709f1baee470a558276e3af5c03420140db1a68629f9408fd95e5dbd819380435bbad52c66746baabcc037ef6076cf215ecab264159bbbd922ae57a4890599f657dacc5a09d56785f08f7adad54e974d10d28c96ba1c3534f04149b2480923fc13d0e55e5251c01610317d48e1f0e7b9d219500000000000005dc0e020000102102adc1cf482226b3c4d0fac399e97302f4d7260f4ba782cd9cfbdb3c7ce94cd1e40e020000102102e2356b87d6435363aaa7a763eeeb3818000527783c0c4ed72999a4853ef2a23b0c9f000400000001022103687c05eb0dade4141769314d1fe89ac712b1c6de66a228110189bd3b278f0fe9037401490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0dfd012002ef000400000000022103f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a03c401710001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0044a00016201f1a088494f6a5b061a15c62c509b5a9f412bc067f6bb279c5597ea97cecf000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf024f000102024a0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf2e0004000000020221026019f70d187fdb882da16113e08014f667d05980997df3abd39bb322801b834b05030401010fc7000400000000022103f8a796072d4b2f087f67973504600feafc628eaf76359d319470b186d8ccea0a039c01490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024f000102024a0001464f6165e2b5fc1660dcecb3c02aabbae36fa0426457c5d976fd6d073328e49400000000000007d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf1604000001bc", "comment": "valid regtest proof file index 1" }, { "proof": { - "prev_out": "205b185906c1592b987230f2342b261ced44960fa48635a9fb0fdde12e2f564e:1", + "prev_out": "9b8e1b77f8dd96171defee350330f075e13d15ad3a2e6f66d6d45250edfd4641:1", "block_header": { "version": 541065216, - "prev_block": "6433f4ca4a2d073fbb1e249e8c2512f9f5698926671198030cf290ef584f9e51", - "merkle_root": "e935b5865553101dfb933c057a1ddc54f73411862f5955340b84b93eeb5d5b1a", - "timestamp": 1718210324, + "prev_block": "6e3216d33065117fd21808e13bb7f4e97d2df965400ace33ce8ad2f9d6cdb7f8", + "merkle_root": "27b1568a6de74bcf03dab3c8057c773de13e158c917627870484ec88bae7cba8", + "timestamp": 1733521992, "bits": 545259519, "nonce": 0 }, - "block_height": 444, - "anchor_tx": "020000000001024e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b2001000000000000000000a1bf3e166c4ff2bc66a96d790faeabea483253f567d3443aca0f180543c6db00000000000000000003e80300000000000022512075131c90f4b84779e2de16cbcb7f330d1bd7ba27fc6027989f1ba565979d6e0ae803000000000000225120d368a69b3afee1d309c119524dc32720f00ed4eef8683236f8a8b8f57a51f557a9d0f505000000002251206cc80644acf5c9238d1beb9a693a621d042be142970c5b1d83b17294983ba631014012c896ab0645874d1f8c4686d7f3d2a5147ac80e0f38d059d465d71fac8bc0fc23f2963ac25c3e04cb1042034a3401c1163d86844b2f178ae679953433db68f40247304402205d59efe6a78355126c9c507fdd6fa608bed41760f922ae68be60ad201c11025a02200222aee2e48102a25a8581e91a6c6298a64f8efffbc6a319a0e263129f1305f90121037b23df1197e5e8a5745ad17f6f155b495c62009c1ada247533758895f31d19b500000000", + "block_height": 446, + "anchor_tx": "020000000001024146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b0100000000000000007a6aed31fe675df9f3cbb30ec93c6aa64c0357ee95e041b68209dd0405126ea100000000000000000003e803000000000000225120b39d40166eab936be97ba489bd3e0b804fbd3c405b6b4dd853a7ecd645c7b8c9e803000000000000225120c439941c12ce99347f4a629a938835f2cdd7cc2646da97f18c52b4f17a18b0f4a9d0f505000000002251208ea64fa1adc917b9a9f7b6f4d671faa71a3ce538e4d22f2bc7696b2228448a2801400a89ab38452e2851d9b8a8faa24078d5517588fa2c857a2b4be65c0ac56631771139a245721a0b70e75e0c33a6eec16ee1d540c00489c8321569edc4e0d3e57f02473044022053b3677ee4a83b5b64d25f6c9f6d03a6678f2daeecad0966b7f1bfcb43f86b6a022041be57f3ca6ce364e28ae4991633ba9a4198f2a8ecd4489e4e1998cd447d8ff3012102dd95677d998373268ea2e0fd1a9bdd62e74eaee0db36ae080957c8f4732448c400000000", "tx_merkle_proof": { "nodes": [ - "1d573ef2fc035cc9fe16f9c7c6aef2a8ba8786f675111ff754e8c8efdcfcc259" + "253153c75426a337a3a39e660e3d5d3a7a2943596ff1e53c8910ad5cad738656" ], "bits": [ false @@ -797,7 +897,7 @@ }, "asset": { "version": 0, - "genesis_first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "genesis_first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "genesis_tag": "first-itestbuxx", "genesis_meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "genesis_output_index": 0, @@ -814,10 +914,10 @@ }, "tx_witness": null, "split_commitment": { - "proof": "00011f24c5895600bc6d8b0f0460f4ffc37d35d39530c8aca99449ecfaa5765fd18e0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "proof": "000171eba4c1f1a64d5342c68cfcfce96a3332c936824f676cc047db8c79bf24f8ba0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", "root_asset": { "version": 0, - "genesis_first_prev_out": "c9db2a3c9b6d59c7503878fe52b0d1f388e6c8d8c8813a4e868e1909ca7a3b00:0", + "genesis_first_prev_out": "473e0595de903c0ae6b627790bc1555a4a631e3a88d608603a28982c50ff2800:0", "genesis_tag": "first-itestbuxx", "genesis_meta_hash": "8d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea", "genesis_output_index": 0, @@ -828,108 +928,129 @@ "prev_witnesses": [ { "prev_id": { - "out_point": "205b185906c1592b987230f2342b261ced44960fa48635a9fb0fdde12e2f564e:1", - "asset_id": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba", - "script_key": "02e8d229608c099e4bfea9e9861d3e2f4e4d43e9a4750b09458f26ff8953360c19" + "out_point": "9b8e1b77f8dd96171defee350330f075e13d15ad3a2e6f66d6d45250edfd4641:1", + "asset_id": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "script_key": "02e2356b87d6435363aaa7a763eeeb3818000527783c0c4ed72999a4853ef2a23b" }, "tx_witness": [ - "d64b676bfd4acbac4be655fe2e5aa00308b5b28f0eb249f42ccf738ed60f3d84067f048a0ba782d2bd35d1503af8959ae5ef8b822da04b25444e60f022674e19" + "62f411bf03948cb3ca8a887a6449b1b99f93458e1c2f837ec20c7759461ad433bdeb43fc3abf29cde2cb2680e3f1c7a5ac60dc5833042ed31067f80c57b28537" ], "split_commitment": null } ], "split_commitment_root": { - "hash": "3ffad0e49b5b7d302f18c8a97cdf265df22c0b648630a5642f8a04103cf36a7a", + "hash": "94c638977dfebc6426564611a74aedddb57c7664e9278213cfcce97de38733f0", "sum": "1200" }, "script_version": 0, - "script_key": "024ad828457a32c78c4a3d4bb2fe0fe4d6f885bb2dc42919b6a7c7d811d8200668", - "group_key": null + "script_key": "0273567b487064507c8bb16c912e8ec608bf09f2d461a89bfe63c37a7b3fdd21fa", + "group_key": null, + "unknown_odd_types": null } } } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02599267c0f1f9c3c3824aced092d97fb56dc255a40580137d4924ca3376c29a1e", - "group_key": null + "script_key": "02550807e261f1add28272dd1dc99979f7bb0e87982c296d52d7b58fba2c1a68e4", + "group_key": null, + "unknown_odd_types": null }, "inclusion_proof": { "output_index": 1, - "internal_key": "037285f36ae2e1e52d9337ec496aaf9a56386251fcf8b40457d3e0735e484d1797", + "internal_key": "026f8944cb3cc0e077dedfbe312cbe6071861bec5cdc055ff6fe7fe26f5a5b8357", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2 - } + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, "exclusion_proofs": [ { "output_index": 0, - "internal_key": "02c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c14", + "internal_key": "028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f", "commitment_proof": { "proof": { "asset_proof": { - "proof": "000188690bb0b1cffaa13b6b29bf686defe11ddc3e9798aff36eeb9509af3dc31fc30000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f", + "proof": "00014c598c9376185fd1dfb86659a5c3675bab19595cf1abf5a1cc7b7dc887d607cf0000000000000258fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2 - } + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, { "output_index": 2, - "internal_key": "0265f90d4a24fd1d2c66d2da48b1da96d3b21222c41b1bb08b08b2a1fa2d03a290", + "internal_key": "027e12e36f36b1b39f15cf888cc4ec443dea1f07082fb35ea2f2d170c782687e73", "commitment_proof": null, "tapscript_proof": { "tap_preimage_1": "", "tap_preimage_2": "", - "bip86": true - } + "bip86": true, + "unknown_odd_types": null + }, + "unknown_odd_types": null } ], "split_root_proof": { "output_index": 0, - "internal_key": "02c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c14", + "internal_key": "028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "3a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba" + "tap_key": "898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0", + "unknown_odd_types": null }, "taproot_asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "version": 2 - } + "version": 2, + "unknown_odd_types": null + }, + "unknown_odd_types": null }, - "tapscript_sibling": "" + "tapscript_sibling": "", + "unknown_odd_types": null }, - "tapscript_proof": null + "tapscript_proof": null, + "unknown_odd_types": null }, "meta_reveal": null, "additional_inputs": null, "challenge_witness": null, "genesis_reveal": null, - "group_key_reveal": null + "group_key_reveal": null, + "alt_leaves": null, + "unknown_odd_types": null }, - "expected": "5441505000040000000002244e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b2000000001045000004020519e4f58ef90f20c03981167268969f5f912258c9e241ebb3f072d4acaf433641a5b5deb3eb9840b3455592f861134f754dc1d7a053c93fb1d10535586b535e914cf6966ffff7f200000000006fd018c020000000001024e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b2001000000000000000000a1bf3e166c4ff2bc66a96d790faeabea483253f567d3443aca0f180543c6db00000000000000000003e80300000000000022512075131c90f4b84779e2de16cbcb7f330d1bd7ba27fc6027989f1ba565979d6e0ae803000000000000225120d368a69b3afee1d309c119524dc32720f00ed4eef8683236f8a8b8f57a51f557a9d0f505000000002251206cc80644acf5c9238d1beb9a693a621d042be142970c5b1d83b17294983ba631014012c896ab0645874d1f8c4686d7f3d2a5147ac80e0f38d059d465d71fac8bc0fc23f2963ac25c3e04cb1042034a3401c1163d86844b2f178ae679953433db68f40247304402205d59efe6a78355126c9c507fdd6fa608bed41760f922ae68be60ad201c11025a02200222aee2e48102a25a8581e91a6c6298a64f8efffbc6a319a0e263129f1305f90121037b23df1197e5e8a5745ad17f6f155b495c62009c1ada247533758895f31d19b50000000008220159c2fcdcefc8e854f71f1175f68687baa8f2aec6c7f916fec95c03fcf23e571d000afd02b40001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a00011f24c5895600bc6d8b0f0460f4ffc37d35d39530c8aca99449ecfaa5765fd18e0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd01660001000259003b7aca09198e864e3a81c8d8c8e688f3d1b052fe783850c7596d9b3c2adbc9000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bad01ab01654e562f2ee1dd0ffba93586a40f9644ed1c262b34f23072982b59c10659185b20000000013a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba02e8d229608c099e4bfea9e9861d3e2f4e4d43e9a4750b09458f26ff8953360c1903420140d64b676bfd4acbac4be655fe2e5aa00308b5b28f0eb249f42ccf738ed60f3d84067f048a0ba782d2bd35d1503af8959ae5ef8b822da04b25444e60f022674e190d283ffad0e49b5b7d302f18c8a97cdf265df22c0b648630a5642f8a04103cf36a7a00000000000004b00e0200001021024ad828457a32c78c4a3d4bb2fe0fe4d6f885bb2dc42919b6a7c7d811d82006680e020000102102599267c0f1f9c3c3824aced092d97fb56dc255a40580137d4924ca3376c29a1e0c9f0004000000010221037285f36ae2e1e52d9337ec496aaf9a56386251fcf8b40457d3e0735e484d17970374014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0df802c7000400000000022102c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c14039c017100010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba044a000188690bb0b1cffaa13b6b29bf686defe11ddc3e9798aff36eeb9509af3dc31fc30000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e00040000000202210265f90d4a24fd1d2c66d2da48b1da96d3b21222c41b1bb08b08b2a1fa2d03a29005030401010f9f000400000000022102c25aac41f462f4cbfb5e0617df241967d3c74ca5d0bd6ce7fc79a21ed1412c140374014900010002203a4c9732ab1fbe44f625811d12fcf8a7a834312f8ab7bd7b0fa5643d8fc87aba04220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1604000001bc", + "expected": "5441505000040000000002244146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b00000001045000004020f8b7cdd6f9d28ace33ce0a4065f92d7de9f4b73be10818d27f116530d316326ea8cbe7ba88ec8404872776918c153ee13d777c05c8b3da03cf4be76d8a56b12748725367ffff7f200000000006fd018c020000000001024146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b0100000000000000007a6aed31fe675df9f3cbb30ec93c6aa64c0357ee95e041b68209dd0405126ea100000000000000000003e803000000000000225120b39d40166eab936be97ba489bd3e0b804fbd3c405b6b4dd853a7ecd645c7b8c9e803000000000000225120c439941c12ce99347f4a629a938835f2cdd7cc2646da97f18c52b4f17a18b0f4a9d0f505000000002251208ea64fa1adc917b9a9f7b6f4d671faa71a3ce538e4d22f2bc7696b2228448a2801400a89ab38452e2851d9b8a8faa24078d5517588fa2c857a2b4be65c0ac56631771139a245721a0b70e75e0c33a6eec16ee1d540c00489c8321569edc4e0d3e57f02473044022053b3677ee4a83b5b64d25f6c9f6d03a6678f2daeecad0966b7f1bfcb43f86b6a022041be57f3ca6ce364e28ae4991633ba9a4198f2a8ecd4489e4e1998cd447d8ff3012102dd95677d998373268ea2e0fd1a9bdd62e74eaee0db36ae080957c8f4732448c400000000082201568673ad5cad10893ce5f16f5943297a3a5d3d0e669ea3a337a32654c7533125000afd02b400010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bfd022301fd021f0165000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005fd01b44a000171eba4c1f1a64d5342c68cfcfce96a3332c936824f676cc047db8c79bf24f8ba0000000000000258ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd016600010002590028ff502c98283a6008d6883a1e634a5a55c10b7927b6e60a3c90de95053e47000000000f66697273742d6974657374627578788d3b306cb9fc3bc5478adccf848583d8952d793747c31dddfd486d7d5d84efea00000000000401000603fd02580bad01ab01654146fded5052d4d6666f2e3aad153de175f0300335eeef1d1796ddf8771b8e9b00000001898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd002e2356b87d6435363aaa7a763eeeb3818000527783c0c4ed72999a4853ef2a23b0342014062f411bf03948cb3ca8a887a6449b1b99f93458e1c2f837ec20c7759461ad433bdeb43fc3abf29cde2cb2680e3f1c7a5ac60dc5833042ed31067f80c57b285370d2894c638977dfebc6426564611a74aedddb57c7664e9278213cfcce97de38733f000000000000004b00e02000010210273567b487064507c8bb16c912e8ec608bf09f2d461a89bfe63c37a7b3fdd21fa0e020000102102550807e261f1add28272dd1dc99979f7bb0e87982c296d52d7b58fba2c1a68e40c9f0004000000010221026f8944cb3cc0e077dedfbe312cbe6071861bec5cdc055ff6fe7fe26f5a5b8357037401490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0df802c70004000000000221028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f039c01710001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd0044a00014c598c9376185fd1dfb86659a5c3675bab19595cf1abf5a1cc7b7dc887d607cf0000000000000258fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2e0004000000020221027e12e36f36b1b39f15cf888cc4ec443dea1f07082fb35ea2f2d170c782687e7305030401010f9f0004000000000221028d87ba784f1639cb7d85f0d1f79e3a0f36a32b745aa84ef5e175aee24ab4631f037401490001000220898e84dbe0f54e8c551fa7f45e8299c57239a4cdd9d5641da75eaf83a577fdd004220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022700010202220000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1604000001be", "comment": "valid regtest proof file index 2" } ], diff --git a/rpcserver.go b/rpcserver.go index 42eb49fcb..f47604a1a 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -1702,6 +1702,7 @@ func (r *rpcServer) marshalProof(ctx context.Context, p *proof.Proof, txMerkleProof = p.TxMerkleProof inclusionProof = p.InclusionProof splitRootProof = p.SplitRootProof + altLeaves = p.AltLeaves ) var txMerkleProofBuf bytes.Buffer @@ -1759,6 +1760,19 @@ func (r *rpcServer) marshalProof(ctx context.Context, p *proof.Proof, } } + var altLeavesBuf bytes.Buffer + if len(altLeaves) > 0 { + var scratch [8]byte + + err := asset.AltLeavesEncoder( + &altLeavesBuf, &altLeaves, &scratch, + ) + if err != nil { + return nil, fmt.Errorf("unable to encode alt leaves: "+ + "%w", err) + } + } + rpcAsset, err := r.MarshalChainAsset(ctx, &asset.ChainAsset{ Asset: &p.Asset, AnchorTx: &p.AnchorTx, @@ -1838,6 +1852,7 @@ func (r *rpcServer) marshalProof(ctx context.Context, p *proof.Proof, IsBurn: p.Asset.IsBurn(), GenesisReveal: genesisReveal, GroupKeyReveal: &GroupKeyReveal, + AltLeaves: altLeavesBuf.Bytes(), }, nil } diff --git a/tapdb/assets_store.go b/tapdb/assets_store.go index 7e8e28e6f..3067ece73 100644 --- a/tapdb/assets_store.go +++ b/tapdb/assets_store.go @@ -1409,30 +1409,9 @@ func (a *AssetStore) FetchProof(ctx context.Context, readOpts := NewAssetStoreReadTx() dbErr := a.db.ExecTx(ctx, &readOpts, func(q ActiveAssetsStore) error { - assetProofs, err := q.FetchAssetProof(ctx, args) - if err != nil { - return fmt.Errorf("unable to fetch asset proof: %w", - err) - } - - switch { - // We have no proof for this script key. - case len(assetProofs) == 0: - return proof.ErrProofNotFound - - // If the query without the outpoint returns exactly one proof - // then we're fine. If there actually are multiple proofs, we - // require the user to specify the outpoint as well. - case len(assetProofs) == 1: - diskProof = assetProofs[0].ProofFile - - return nil - - // User needs to specify the outpoint as well, since we have - // multiple proofs for this script key. - default: - return proof.ErrMultipleProofs - } + var err error + diskProof, err = fetchProof(ctx, q, args) + return err }) switch { case errors.Is(dbErr, sql.ErrNoRows): @@ -1444,6 +1423,34 @@ func (a *AssetStore) FetchProof(ctx context.Context, return diskProof, nil } +// fetchProof is a wrapper around the FetchAssetProof query that enforces that +// a proof is only returned if exactly one matching proof was found. +func fetchProof(ctx context.Context, q ActiveAssetsStore, + args sqlc.FetchAssetProofParams) (proof.Blob, error) { + + assetProofs, err := q.FetchAssetProof(ctx, args) + if err != nil { + return nil, fmt.Errorf("unable to fetch asset proof: %w", err) + } + + switch { + // We have no proof for this script key. + case len(assetProofs) == 0: + return nil, proof.ErrProofNotFound + + // If the query without the outpoint returns exactly one proof + // then we're fine. If there actually are multiple proofs, we + // require the user to specify the outpoint as well. + case len(assetProofs) == 1: + return assetProofs[0].ProofFile, nil + + // User needs to specify the outpoint as well, since we have + // multiple proofs for this script key. + default: + return nil, proof.ErrMultipleProofs + } +} + // locatorToProofQuery turns a proof locator into a FetchAssetProof query // struct. func locatorToProofQuery(locator proof.Locator) (FetchAssetProof, error) { @@ -2084,8 +2091,12 @@ func (a *AssetStore) queryCommitments(ctx context.Context, chainAnchorToAssets = make( map[wire.OutPoint][]*asset.ChainAsset, ) - anchorPoints = make(map[wire.OutPoint]AnchorPoint) - err error + anchorPoints = make(map[wire.OutPoint]AnchorPoint) + anchorAltLeaves = make( + map[wire.OutPoint][]asset.AltLeaf[asset.Asset], + ) + matchingAssetProofs = make(map[wire.OutPoint]proof.Blob) + err error ) readOpts := NewAssetStoreReadTx() @@ -2145,6 +2156,31 @@ func (a *AssetStore) queryCommitments(ctx context.Context, } anchorPoints[anchorPoint] = anchorUTXO + + // TODO(jhb): replace full proof fetch with + // outpoint -> alt leaf table / index + // We also need to fetch the input proof here, in order + // to fetch any committed alt leaves. + assetLoc := proof.Locator{ + AssetID: fn.Ptr(matchingAsset.ID()), + ScriptKey: *matchingAsset.ScriptKey.PubKey, + OutPoint: &matchingAsset.AnchorOutpoint, + } + proofArgs, err := locatorToProofQuery(assetLoc) + if err != nil { + return err + } + + var assetProof proof.Blob + assetProof, err = fetchProof(ctx, q, proofArgs) + switch { + case errors.Is(err, sql.ErrNoRows): + return proof.ErrProofNotFound + case err != nil: + return err + } + + matchingAssetProofs[anchorPoint] = assetProof } return nil @@ -2153,6 +2189,17 @@ func (a *AssetStore) queryCommitments(ctx context.Context, return nil, dbErr } + for anchorPoint, rawProof := range matchingAssetProofs { + lastProof, err := rawProof.AsSingleProof() + if err != nil { + return nil, err + } + + anchorAltLeaves[anchorPoint] = append( + anchorAltLeaves[anchorPoint], lastProof.AltLeaves..., + ) + } + // Our final query wants the complete Taproot Asset commitment for each // of the managed UTXOs. Some of the assets that match our query might // actually be in the same Taproot Asset commitment, so we'll collect @@ -2164,6 +2211,7 @@ func (a *AssetStore) queryCommitments(ctx context.Context, anchorPoint := anchorPoint anchorUTXO := anchorPoints[anchorPoint] anchoredAssets := chainAnchorToAssets[anchorPoint] + anchoredAltLeaves := anchorAltLeaves[anchorPoint] // Fetch the asset leaves from each chain asset, and then // build a Taproot Asset commitment from this set of assets. @@ -2199,6 +2247,13 @@ func (a *AssetStore) queryCommitments(ctx context.Context, return nil, err } + // The reconstructed commitment must also include any alt leaves + // included in the original commitment. + err = tapCommitment.MergeAltLeaves(anchoredAltLeaves) + if err != nil { + return nil, err + } + // Verify that the constructed Taproot Asset commitment matches // the commitment root stored in the managed UTXO. commitmentRoot := tapCommitment.TapscriptRoot(nil) diff --git a/tapdb/assets_store_test.go b/tapdb/assets_store_test.go index 5b177821d..928fa2492 100644 --- a/tapdb/assets_store_test.go +++ b/tapdb/assets_store_test.go @@ -618,7 +618,28 @@ func (a *assetGenerator) genAssets(t *testing.T, assetStore *AssetStore, height := a.anchorPointsToHeights[desc.anchorPoint] tapCommitment := anchorPointsToTapCommitments[desc.anchorPoint] - err := assetStore.importAssetFromProof( + // Encode a minimal proof so we have a valid proof blob to + // store. + assetProof := proof.Proof{} + assetProof.AnchorTx = *anchorPoint + assetProof.BlockHeight = height + + txMerkleProof, err := proof.NewTxMerkleProof( + []*wire.MsgTx{anchorPoint}, 0, + ) + require.NoError(t, err) + + assetProof.TxMerkleProof = *txMerkleProof + assetProof.Asset = *newAsset + assetProof.InclusionProof = proof.TaprootProof{ + OutputIndex: 0, + InternalKey: test.RandPubKey(t), + } + + proofBlob, err := proof.EncodeAsProofFile(&assetProof) + require.NoError(t, err) + + err = assetStore.importAssetFromProof( ctx, assetStore.db, &proof.AnnotatedProof{ AssetSnapshot: &proof.AssetSnapshot{ AnchorTx: anchorPoint, @@ -627,7 +648,7 @@ func (a *assetGenerator) genAssets(t *testing.T, assetStore *AssetStore, ScriptRoot: tapCommitment, AnchorBlockHeight: height, }, - Blob: bytes.Repeat([]byte{1}, 100), + Blob: proofBlob, }, ) require.NoError(t, err) diff --git a/tapdb/sqlutils_test.go b/tapdb/sqlutils_test.go index 5f9c49996..cca94ed84 100644 --- a/tapdb/sqlutils_test.go +++ b/tapdb/sqlutils_test.go @@ -56,6 +56,7 @@ func (d *DbHandler) AddRandomAssetProof(t *testing.T) (*asset.Asset, // Next, we'll make a new random asset that also has a few inputs with // dummy witness information. testAsset := randAsset(t) + testAltLeaves := asset.ToAltLeaves(asset.RandAltLeaves(t, true)) assetRoot, err := commitment.NewAssetCommitment(testAsset) require.NoError(t, err) @@ -66,6 +67,9 @@ func (d *DbHandler) AddRandomAssetProof(t *testing.T) (*asset.Asset, ) require.NoError(t, err) + err = taprootAssetRoot.MergeAltLeaves(testAltLeaves) + require.NoError(t, err) + // With our asset created, we can now create the AnnotatedProof we use // to import assets into the database. var blockHash chainhash.Hash @@ -87,6 +91,7 @@ func (d *DbHandler) AddRandomAssetProof(t *testing.T) (*asset.Asset, // Generate a random proof and encode it into a proof blob. testProof := randProof(t, testAsset) + testProof.AltLeaves = testAltLeaves var proofBlobBuffer bytes.Buffer err = testProof.Encode(&proofBlobBuffer) diff --git a/tapdb/universe_test.go b/tapdb/universe_test.go index 65e3a4d6b..ee3881736 100644 --- a/tapdb/universe_test.go +++ b/tapdb/universe_test.go @@ -184,6 +184,7 @@ func randProof(t *testing.T, argAsset *asset.Asset) *proof.Proof { InclusionProof: proof.TaprootProof{ InternalKey: test.RandPubKey(t), }, + AltLeaves: asset.ToAltLeaves(asset.RandAltLeaves(t, true)), } } diff --git a/tapfreighter/wallet.go b/tapfreighter/wallet.go index e309a7744..baff3a3bb 100644 --- a/tapfreighter/wallet.go +++ b/tapfreighter/wallet.go @@ -271,7 +271,8 @@ func (f *AssetWallet) FundAddressSend(ctx context.Context, func createPassivePacket(params *address.ChainParams, passiveAsset *asset.Asset, activePackets []*tappsbt.VPacket, anchorOutputIndex uint32, anchorOutputInternalKey keychain.KeyDescriptor, prevOut wire.OutPoint, - inputProof *proof.Proof) (*tappsbt.VPacket, error) { + inputProof *proof.Proof, + inputAltLeaves []*asset.Asset) (*tappsbt.VPacket, error) { // Specify virtual input. inputAsset := passiveAsset.Copy() @@ -281,8 +282,12 @@ func createPassivePacket(params *address.ChainParams, passiveAsset *asset.Asset, SighashType: txscript.SigHashDefault, }, } + err := vInput.SetAltLeaves(inputAltLeaves) + if err != nil { + return nil, err + } - err := tapsend.ValidateVPacketVersions(activePackets) + err = tapsend.ValidateVPacketVersions(activePackets) if err != nil { return nil, err } @@ -369,6 +374,23 @@ func (f *AssetWallet) FundPacket(ctx context.Context, return nil, address.ErrMismatchedHRP } + // Each anchor output must have a valid set of AltLeaves at this point. + outputAltLeaves := make(map[uint32][]asset.AltLeaf[asset.Asset]) + for _, vOut := range vPkt.Outputs { + outputAltLeaves[vOut.AnchorOutputIndex] = append( + outputAltLeaves[vOut.AnchorOutputIndex], + asset.CopyAltLeaves(vOut.AltLeaves)..., + ) + } + + for anchorIdx, leaves := range outputAltLeaves { + err := asset.ValidAltLeaves(leaves) + if err != nil { + return nil, fmt.Errorf("anchor output %d invalid alt "+ + "leaves: %w", anchorIdx, err) + } + } + // We need to find a commitment that has enough assets to satisfy this // send request. We'll map the address to a set of constraints, so we // can use that to do Taproot asset coin selection. @@ -580,7 +602,18 @@ func (f *AssetWallet) hasOtherAssets(inputCommitments tappsbt.InputCommitments, return false, err } - if len(passiveCommitments.CommittedAssets()) > 0 { + // We're trying to find out if there are any other assets in the + // commitment. We don't want to count alt leaves as "assets" per + // se in this context, so we trim them out, just for the next + // check. + trimmedPassiveCommitments, _, err := commitment.TrimAltLeaves( + passiveCommitments, + ) + if err != nil { + return false, err + } + + if len(trimmedPassiveCommitments.CommittedAssets()) > 0 { return true, nil } } @@ -910,6 +943,16 @@ func createAndSetInput(vPkt *tappsbt.VPacket, idx int, } vPkt.SetInputAsset(idx, assetInput.Asset) + inputAltLeaves, err := assetInput.Commitment.FetchAltLeaves() + if err != nil { + return fmt.Errorf("cannot fetch alt leaves from input: %w", err) + } + + err = vPkt.Inputs[idx].SetAltLeaves(inputAltLeaves) + if err != nil { + return fmt.Errorf("cannot set alt leaves on vInput: %w", err) + } + return nil } @@ -1233,7 +1276,18 @@ func (f *AssetWallet) CreatePassiveAssets(ctx context.Context, return nil, err } - passiveAssets := passiveCommitments.CommittedAssets() + // We're trying to determine what assets are left over after + // removing the active assets. But we don't want to count the + // alt leaves as "assets" in this context, so we'll trim them + // out. + trimmedPassives, altLeaves, err := commitment.TrimAltLeaves( + passiveCommitments, + ) + if err != nil { + return nil, err + } + + passiveAssets := trimmedPassives.CommittedAssets() if len(passiveAssets) == 0 { continue } @@ -1262,7 +1316,7 @@ func (f *AssetWallet) CreatePassiveAssets(ctx context.Context, passivePacket, err := createPassivePacket( f.cfg.ChainParams, passiveAsset, activePackets, anchorOutIdx, *anchorOutDesc, prevID.OutPoint, - inputProof, + inputProof, altLeaves, ) if err != nil { return nil, fmt.Errorf("unable to create "+ diff --git a/tappsbt/decode.go b/tappsbt/decode.go index f9f715231..69b68551f 100644 --- a/tappsbt/decode.go +++ b/tappsbt/decode.go @@ -366,7 +366,7 @@ func proofDecoder(p **proof.Proof) decoderFunc { } // altLeavesDecoder returns a decoder function that can handle nil alt leaves. -func altLeavesDecoder(a *[]AltLeafAsset) decoderFunc { +func altLeavesDecoder(a *[]asset.AltLeaf[asset.Asset]) decoderFunc { return func(key, byteVal []byte) error { if len(byteVal) == 0 { return nil diff --git a/tappsbt/decode_test.go b/tappsbt/decode_test.go index 86f304e7c..1b84c9580 100644 --- a/tappsbt/decode_test.go +++ b/tappsbt/decode_test.go @@ -241,8 +241,8 @@ func TestEncodingDecoding(t *testing.T) { name: "random packet with colliding alt leaves", pkg: func(t *testing.T) *VPacket { pkt := RandPacket(t, true, true) - firstLeaf := RandAltLeaf(t) - secondLeaf := RandAltLeaf(t) + firstLeaf := asset.RandAltLeaf(t) + secondLeaf := asset.RandAltLeaf(t) firstLeafKey := asset.ToSerialized( firstLeaf.ScriptKey.PubKey, @@ -251,7 +251,9 @@ func TestEncodingDecoding(t *testing.T) { require.NoError(t, err) secondLeaf.ScriptKey = asset.NewScriptKey(leafKeyCopy) - altLeaves := []AltLeafAsset{firstLeaf, secondLeaf} + altLeaves := []asset.AltLeaf[asset.Asset]{ + firstLeaf, secondLeaf, + } pkt.Inputs[0].AltLeaves = asset.CopyAltLeaves(altLeaves) pkt.Outputs[0].AltLeaves = asset.CopyAltLeaves( @@ -270,9 +272,11 @@ func TestEncodingDecoding(t *testing.T) { pkt := RandPacket(t, true, true) numLeaves := 2000 - altLeaves := make([]AltLeafAsset, 0, numLeaves) - for range numLeaves { - altLeaves = append(altLeaves, RandAltLeaf(t)) + altLeaves := make( + []asset.AltLeaf[asset.Asset], numLeaves, + ) + for idx := range numLeaves { + altLeaves[idx] = asset.RandAltLeaf(t) } pkt.Inputs[0].AltLeaves = altLeaves diff --git a/tappsbt/encode.go b/tappsbt/encode.go index f7342c1b1..ebfa44654 100644 --- a/tappsbt/encode.go +++ b/tappsbt/encode.go @@ -384,9 +384,9 @@ func proofEncoder(p *proof.Proof) encoderFunc { } // altLeavesEncoder is an encoder that does nothing if the given alt leaf slice -// is nil. -func altLeavesEncoder(a []AltLeafAsset) encoderFunc { - if a == nil { +// is nil or empty. +func altLeavesEncoder(a []asset.AltLeaf[asset.Asset]) encoderFunc { + if len(a) == 0 { return func([]byte) ([]*customPsbtField, error) { return nil, nil } diff --git a/tappsbt/interface.go b/tappsbt/interface.go index 61f958115..5e988d3d4 100644 --- a/tappsbt/interface.go +++ b/tappsbt/interface.go @@ -2,6 +2,7 @@ package tappsbt import ( "bytes" + "errors" "fmt" "net/url" @@ -79,7 +80,12 @@ var ( // ErrInvalidVPacketVersion is an error returned when a VPacket version // is invalid. - ErrInvalidVPacketVersion = fmt.Errorf("tappsbt: invalid version") + ErrInvalidVPacketVersion = errors.New("tappsbt: invalid version") + + // ErrAltLeavesAlreadySet is returned when a VInput or VOutput already + // has some AltLeaves set, but a call was made to set the AltLeaves + // again. + ErrAltLeavesAlreadySet = errors.New("tappsbt: alt leaves already set") ) // VPacketVersion is the version of the virtual transaction. This can signal @@ -106,9 +112,6 @@ type bip32DerivationPredicate func(*psbt.Bip32Derivation) bool // BIP-0032 derivation paths. type taprootBip32DerivationPredicate func(*psbt.TaprootBip32Derivation) bool -// AltLeafAsset is an AltLeaf backed by an Asset object. -type AltLeafAsset = asset.AltLeaf[*asset.Asset] - var ( // VOutIsSplitRoot is a predicate that returns true if the virtual // output is a split root output. @@ -399,7 +402,7 @@ type VInput struct { // will be inserted in the input anchor Tap commitment. These // data-carrying leaves are used for a purpose distinct from // representing individual Taproot Assets. - AltLeaves []AltLeafAsset + AltLeaves []asset.AltLeaf[asset.Asset] } // Copy creates a deep copy of the VInput. @@ -422,6 +425,27 @@ func (i *VInput) Asset() *asset.Asset { return i.asset } +// SetAltLeaves asserts that a set of AltLeaves are valid, and updates a VInput +// to set the AltLeaves. Setting the input's AltLeaves twice is disallowed. +func (i *VInput) SetAltLeaves(altLeafAssets []*asset.Asset) error { + // AltLeaves can be set exactly once on a VInput. + if len(i.AltLeaves) != 0 { + return fmt.Errorf("%w: input", ErrAltLeavesAlreadySet) + } + + // Each asset must be a valid AltLeaf, and the set of AltLeaves must be + // valid, by not having overlapping keys in the AltCommitment. + altLeaves := asset.ToAltLeaves(altLeafAssets) + err := asset.ValidAltLeaves(altLeaves) + if err != nil { + return err + } + + i.AltLeaves = asset.CopyAltLeaves(altLeaves) + + return nil +} + // serializeScriptKey serializes the input asset's script key as the PSBT // derivation information on the virtual input. func (i *VInput) serializeScriptKey(key asset.ScriptKey, coinType uint32) { @@ -599,7 +623,7 @@ type VOutput struct { // will be inserted in the output anchor Tap commitment. These // data-carrying leaves are used for a purpose distinct from // representing individual Taproot Assets. - AltLeaves []AltLeafAsset + AltLeaves []asset.AltLeaf[asset.Asset] } // Copy creates a deep copy of the VOutput. @@ -660,6 +684,27 @@ func (o *VOutput) SetAnchorInternalKey(keyDesc keychain.KeyDescriptor, ) } +// SetAltLeaves asserts that a set of AltLeaves are valid, and updates a VOutput +// to set the AltLeaves. Setting the output's AltLeaves twice is disallowed. +func (o *VOutput) SetAltLeaves(altLeafAssets []*asset.Asset) error { + // AltLeaves can be set exactly once on a VOutput. + if len(o.AltLeaves) != 0 { + return fmt.Errorf("%w: output", ErrAltLeavesAlreadySet) + } + + // Each asset must be a valid AltLeaf, and the set of AltLeaves must be + // valid, by not having overlapping keys in the AltCommitment. + altLeaves := asset.ToAltLeaves(altLeafAssets) + err := asset.ValidAltLeaves(altLeaves) + if err != nil { + return err + } + + o.AltLeaves = asset.CopyAltLeaves(altLeaves) + + return nil +} + // AnchorKeyToDesc attempts to extract the key descriptor of the anchor output // from the anchor output BIP-0032 derivation information. func (o *VOutput) AnchorKeyToDesc() (keychain.KeyDescriptor, error) { diff --git a/tappsbt/mock.go b/tappsbt/mock.go index 49bf2fcbc..e8a534f79 100644 --- a/tappsbt/mock.go +++ b/tappsbt/mock.go @@ -37,38 +37,6 @@ var ( ) ) -// RandAltLeaf generates a random Asset that is a valid AltLeaf. -func RandAltLeaf(t testing.TB) *asset.Asset { - randWitness := []asset.Witness{ - {TxWitness: test.RandTxWitnesses(t)}, - } - randKey := asset.RandScriptKey(t) - randVersion := asset.ScriptVersion(test.RandInt[uint16]()) - randLeaf, err := asset.NewAltLeaf(randKey, randVersion, randWitness) - require.NoError(t, err) - - require.NoError(t, randLeaf.ValidateAltLeaf()) - - return randLeaf -} - -// RandAltLeaves generates a set of random number of random alt leaves. -func RandAltLeaves(t testing.TB) []AltLeafAsset { - // Limit the number of leaves to keep the test vectors small. - maxLeaves := int32(4) - numLeaves := test.RandInt31n(maxLeaves) - if numLeaves == 0 { - return nil - } - - altLeaves := make([]AltLeafAsset, 0, numLeaves) - for range numLeaves { - altLeaves = append(altLeaves, AltLeafAsset(RandAltLeaf(t))) - } - - return altLeaves -} - func RandAssetForPacket(t testing.TB, assetType asset.Type, desc keychain.KeyDescriptor) *asset.Asset { @@ -205,9 +173,12 @@ func RandPacket(t testing.TB, setVersion, altLeaves bool) *VPacket { } if altLeaves { - randVInput.AltLeaves = RandAltLeaves(t) - randVOutput1.AltLeaves = RandAltLeaves(t) - randVOutput2.AltLeaves = RandAltLeaves(t) + inputLeaves := asset.RandAltLeaves(t, true) + output1Leaves := asset.RandAltLeaves(t, true) + output2Leaves := asset.RandAltLeaves(t, true) + randVInput.AltLeaves = asset.ToAltLeaves(inputLeaves) + randVOutput1.AltLeaves = asset.ToAltLeaves(output1Leaves) + randVOutput2.AltLeaves = asset.ToAltLeaves(output2Leaves) } vPacket := &VPacket{ @@ -346,15 +317,9 @@ func NewTestFromVInput(t testing.TB, i *VInput) *TestVInput { ti.AltLeaves = make([]*asset.TestAsset, 0, len(i.AltLeaves)) for idx := range i.AltLeaves { - // We also need a type assertion on each leaf. - leaf, ok := i.AltLeaves[idx].(*asset.Asset) - if !ok { - t.Errorf("AltLeaf must be of type *asset.Asset") - } - + leaf := i.AltLeaves[idx].(*asset.Asset) ti.AltLeaves = append( - ti.AltLeaves, - asset.NewTestFromAsset(t, leaf), + ti.AltLeaves, asset.NewTestFromAsset(t, leaf), ) } } @@ -415,7 +380,9 @@ func (ti *TestVInput) ToVInput(t testing.TB) *VInput { } if len(ti.AltLeaves) > 0 { - vi.AltLeaves = make([]AltLeafAsset, len(ti.AltLeaves)) + vi.AltLeaves = make( + []asset.AltLeaf[asset.Asset], len(ti.AltLeaves), + ) for idx, leaf := range ti.AltLeaves { vi.AltLeaves[idx] = leaf.ToAsset(t) } @@ -669,15 +636,9 @@ func NewTestFromVOutput(t testing.TB, v *VOutput, vo.AltLeaves = make([]*asset.TestAsset, 0, len(vo.AltLeaves)) for idx := range v.AltLeaves { - // We also need a type assertion on each leaf. - leaf, ok := v.AltLeaves[idx].(*asset.Asset) - if !ok { - t.Errorf("AltLeaf must be of type *asset.Asset") - } - + leaf := v.AltLeaves[idx].(*asset.Asset) vo.AltLeaves = append( - vo.AltLeaves, - asset.NewTestFromAsset(t, leaf), + vo.AltLeaves, asset.NewTestFromAsset(t, leaf), ) } } @@ -800,7 +761,9 @@ func (to *TestVOutput) ToVOutput(t testing.TB) *VOutput { } if len(to.AltLeaves) > 0 { - v.AltLeaves = make([]AltLeafAsset, len(to.AltLeaves)) + v.AltLeaves = make( + []asset.AltLeaf[asset.Asset], len(to.AltLeaves), + ) for idx, leaf := range to.AltLeaves { v.AltLeaves[idx] = leaf.ToAsset(t) } diff --git a/tappsbt/testdata/psbt_encoding_generated.json b/tappsbt/testdata/psbt_encoding_generated.json index d1e3d6ed5..e47b041f4 100644 --- a/tappsbt/testdata/psbt_encoding_generated.json +++ b/tappsbt/testdata/psbt_encoding_generated.json @@ -385,6 +385,7 @@ "raw_key": "036513025e8a6e9714c1f7fd4b886e3d09895840b53f1dfff7f275d3aaedfd32e8", "tapscript_root": "703934bf50a28da102975deda77e758579ea3dfe4136abf752b3b8271d03e944" }, + "alt_leaves": null, "unknown_odd_types": null }, "alt_leaves": [ @@ -440,6 +441,32 @@ "script_key": "025202c1f0b42c64163f217af54b6ccdcaf9589c6740f92bf5951d870bc2258802", "group_key": null, "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "717d3a1d0f334c62fe52", + "ba53af19779cb2948b65" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 7255, + "script_key": "02fed219e0453d112713e51136d43e5b0f984e9d998ac18d676b815756bf27cb59", + "group_key": null, + "unknown_odd_types": null } ] }, @@ -748,6 +775,7 @@ "raw_key": "036513025e8a6e9714c1f7fd4b886e3d09895840b53f1dfff7f275d3aaedfd32e8", "tapscript_root": "703934bf50a28da102975deda77e758579ea3dfe4136abf752b3b8271d03e944" }, + "alt_leaves": null, "unknown_odd_types": null }, "relative_lock_time": 345, @@ -767,43 +795,14 @@ { "prev_id": null, "tx_witness": [ - "717d3aba53af19779cb2", - "948b6570ffa0b773963c", - "130ad797ddeafe4e3ad2", - "9b5125210f0ef1c31409" + "7ff4b6f44090a32711f3" ], "split_commitment": null } ], "split_commitment_root": null, - "script_version": 4391, - "script_key": "020c86f9c8717be735373d5ed6f1df70d24b1e3b999a0eb963d631f857f34113c6", - "group_key": null, - "unknown_odd_types": null - }, - { - "version": 0, - "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", - "genesis_tag": "", - "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", - "genesis_output_index": 0, - "genesis_type": 0, - "amount": 0, - "lock_time": 0, - "relative_lock_time": 0, - "prev_witnesses": [ - { - "prev_id": null, - "tx_witness": [ - "a32cbd9c2887aa113df2", - "468928d5a23b9ca740f8" - ], - "split_commitment": null - } - ], - "split_commitment_root": null, - "script_version": 64714, - "script_key": "0293cf788bcb2bd4216dde027b38f6644153510192097cb8f25e44e9af1f55e1d7", + "script_version": 55682, + "script_key": "02edb1a2c5997b7948242ca02e4723dd1c59d6710be6f9356044096a54a9585193", "group_key": null, "unknown_odd_types": null } @@ -900,25 +899,51 @@ { "prev_id": null, "tx_witness": [ - "a53dbf8e7ded323cb76f", - "0d3fac476c9fb03fc922" + "e831b10b7bf5b15c47a5", + "3dbf8e7dcafc9e138647" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 14950, + "script_key": "020df5e8775ded1d6315e4d1155d52eb2048577db24d2b580958fce93844168b44", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "e88fd580316492b49753", + "b5d5027ce15a4f0a5825" ], "split_commitment": null } ], "split_commitment_root": null, - "script_version": 9560, - "script_key": "020fe830afb86f1b8b56c4d09cb6069ae0e4e2a09a8c0f38ebf29ce0487fc4dd02", + "script_version": 36584, + "script_key": "022431bfccda8afdc4bb17132699220068f25487d6d663193ccadc133aeefee0bd", "group_key": null, "unknown_odd_types": null } ] } ], - "version": 0, + "version": 1, "chain_params_hrp": "tapbc" }, - "expected": "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QgFAiSPLtHNohncvRWwoHQk/n7a8MULWAJb/GEUQz2aVU195KmdkhKuRntep5m+WMupCDc45iNjwaCchYvK7+IcOQw4CAAAQIQJfz4z3uiy5VzldF476bYAhPcAEeJY62tpFvtuRuEh0jxEhA2UTAl6KbpcUwff9S4huPQmJWEC1Px3/9/J106rt/TLoDKUABAAAAAACIQI3K/m5u8B9sw33y7+rryWSU8fMHe2lOCuLlVsPj3r3pgN6AUkAAQACIL+vqU644RS3UJXQrOaGM50+tQvgD4FKniYSXU0+uPAaBCIAAP//////////////////////////////////////////AicAAQACIgAA//////////////////////////////////////////8FBADAAQEN/QFOA6UABAAAAAICIQKdduJO68wj8q4t0El3US2r3Jv8RaCPKegGybH+dotn2AN6AUkAAQACIL+vqU644RS3UJXQrOaGM50+tQvgD4FKniYSXU0+uPAaBCIAAP//////////////////////////////////////////AicAAQACIgAA//////////////////////////////////////////8FBADAAQF3AAQAAAADAiECrlX4aHDxCYQOkF66cz+iW8Mbdj8klIK3zpN2KpsLjR4FTAFBARqsJUCKTSgjPNMl+u+t6e8Prnb8seNdCBQARbuqOBsw7vRuRjA1VmAu8TzvXS//Pcai7OZlf8keSwpbui3tTv8DBADAAQIEAQEuAAQAAAAEAiECNMRdtB31mzfE7bm6QkP7+dW0STw/tQdWi6dptA/0FrQFAwQBAQ+fAAQAAAAEAiEC3DSUSNywYyaZaAbttpBj5yJY+cEct5LWT8co3tD8+TwDdAFJAAEAAiC/r6lOuOEUt1CV0KzmhjOdPrUL4A+BSp4mEl1NPrjwGgQiAAD//////////////////////////////////////////wInAAEAAiIAAP//////////////////////////////////////////ER4AAQACGXF1b3RoIHRoZSByYXZlbiBuZXZlcm1vcmUVCQIDZm9vA2JhchYEAAAAKheKmiZvl2R5Szc5cBFegu1vQSXI+nMR5Nfe+pItqud4Zme+jpmBQDdmMDFm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6nLpNGpdWG8CMUYP1SrZiVvIJA2HHe9SLbM5wYbBFJhDpISJkObduaYGX0vBQir1P0vIbxsISokYn/AxbNwQUR2nHadX5VPK2p87WxQ085I2c621fYPKrDksOK8VbW/DC1X61BEt8rlVMeaBFOmtEAEecve3z9sOCv0BlgABAAKKmiZvl2R5Szc5cBFegu1vQSXI+nMR5Nfe+pItqud4Zme+jpmBQDdmMDFmMWY1NzM5ODE2NTlhNDRmZjE3YTRjNzIxNWEzYjUzOWViMWU1ODQ5YzYwNzdkYmI1NzIyZjU3MTdhMjh/AfH1c5gWWaRP8XpMchWjtTnrHlhJxgd9u1ci9XF6KCRPzTYABAEABgEBBwP9BTkJAQYLrQGrAWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCAUCJI8u0c2iGdy9FbCgdCT+ftrwxQtYAlv8YRRDPZpVTX3kqZ2SEq5Ge16nmb5Yy6kINzjmI2PBoJyFi8rv4hw5DDgIAABAhAl/PjPe6LLlXOV0XjvptgCE9wAR4ljra2kW+25G4SHSPESEDZRMCXopulxTB9/1LiG49CYlYQLU/Hf/38nXTqu39MugMpQAEAAAAAAIhAjcr+bm7wH2zDffLv6uvJZJTx8wd7aU4K4uVWw+PevemA3oBSQABAAIgv6+pTrjhFLdQldCs5oYznT61C+APgUqeJhJdTT648BoEIgAA//////////////////////////////////////////8CJwABAAIiAAD//////////////////////////////////////////wUEAMABAQ39AU4DpQAEAAAAAgIhAp124k7rzCPyri3QSXdRLavcm/xFoI8p6AbJsf52i2fYA3oBSQABAAIgv6+pTrjhFLdQldCs5oYznT61C+APgUqeJhJdTT648BoEIgAA//////////////////////////////////////////8CJwABAAIiAAD//////////////////////////////////////////wUEAMABAXcABAAAAAMCIQKuVfhocPEJhA6QXrpzP6Jbwxt2PySUgrfOk3YqmwuNHgVMAUEBGqwlQIpNKCM80yX6763p7w+udvyx410IFABFu6o4GzDu9G5GMDVWYC7xPO9dL/89xqLs5mV/yR5LClu6Le1O/wMEAMABAgQBAS4ABAAAAAQCIQI0xF20HfWbN8TtubpCQ/v51bRJPD+1B1aLp2m0D/QWtAUDBAEBD58ABAAAAAQCIQLcNJRI3LBjJploBu22kGPnIlj5wRy3ktZPxyje0Pz5PAN0AUkAAQACIL+vqU644RS3UJXQrOaGM50+tQvgD4FKniYSXU0+uPAaBCIAAP//////////////////////////////////////////AicAAQACIgAA//////////////////////////////////////////8RHgABAAIZcXVvdGggdGhlIHJhdmVuIG5ldmVybW9yZRUJAgNmb28DYmFyFgQAAAAqF4qaJm+XZHlLNzlwEV6C7W9BJcj6cxHk1976ki2q53hmZ76OmYFAN2YwMWYxZjU3Mzk4MTY1OWE0NGZmMTdhNGM3MjE1YTNiNTM5ZWIxZTU4NDljNjA3N2RiYjU3MjJmNTcxN2EyOH8B8fVzmBZZpE/xekxyFaO1OeseWEnGB327VyL1cXooJE/NNgAZQQNlEwJeim6XFMH3/UuIbj0JiVhAtT8d//fyddOq7f0y6HA5NL9Qoo2hApdd7ad+dYV56j3+QTar91KzuCcdA+lEAXwIAAAAAAAAAcgBfQgAAAAAAAABWQF+oQJaCzEBLwMtBApxfTq6U68Zd5yyCpSLZXD/oLdzljwKEwrXl93q/k460gqbUSUhDw7xwxQJDgIRJxAhAgyG+chxe+c1Nz1e1vHfcNJLHjuZmg65Y9Yx+FfzQRPGRAsbARkDFwIKoyy9nCiHqhE98gpGiSjVojucp0D4DgL8yhAhApPPeIvLK9Qhbd4Cezj2ZEFTUQGSCXy48l5E6a8fVeHXAAFwAQEBcQEAAXIIAAAAAAAAAAEBcyECaXkt1TE9Jt/pROAdatig4MONta9H3q8VmBz53b3erBsidAJpeS3VMT0m3+lE4B1q2KDgw421r0ferxWYHPndvd6sGxgAAAAA+QMAgAAAAIB7AACAAAAAAMgBAAAhdWl5LdUxPSbf6UTgHWrYoODDjbWvR96vFZgc+d293qwbGQAAAAAA+QMAgAAAAIB7AACAAAAAAMgBAAABdv2SAQABAAKKDyZobTVM3hYH7ilLOfMrfHgiumT4SrQ8oMbmuRwf074m+/KbQGEwZjNjYTk5MzZlODQ2MWYxMGQ3N2M5NmVhODBhN2E2NjVmNjA2ZjZhNjNiN2YzZGZkMjU2N2MxODk3OWU0ZDag88qZNuhGHxDXfJbqgKemZfYG9qY7fz39JWfBiXnk1kFDkIkABAEABgX+bJxkuAutAasBZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0IBQGXcJ8AatOAwpcSVsLxwUPRJ2Pt5w9TFx0GKi1g6NoIyaTWVrHWfb6AhARcu8H19Zx3BkbWmhGgyLnBBZfmXvNIOAgAAECECPS9WsfxJN8QmtbZV4Q6nvPcDGG986VPms51VQmjl7L0RIQIT4XZuu7wcGMhqAkoc7giVxbY0nENllGwSiyRoVwx3IwF4QQEZfOItErxamVh1M69BFp+h3J/4ZsDU0wIRWNYpM2ctERl84i0SvFqZWHUzr0EWn6Hcn/hmwNTTAhFY1ikzZy0RAXkBAAF8CAAAAAAAAAAAAX0IAAAAAAAAAAABfkYBRAsbARkDFwIKpT2/jn3tMjy3bwoNP6xHbJ+wP8kiDgIlWBAhAg/oMK+4bxuLVsTQnLYGmuDk4qCajA846/Kc4Eh/xN0CAA==", + "expected": "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QgFAiSPLtHNohncvRWwoHQk/n7a8MULWAJb/GEUQz2aVU195KmdkhKuRntep5m+WMupCDc45iNjwaCchYvK7+IcOQw4CAAAQIQJfz4z3uiy5VzldF476bYAhPcAEeJY62tpFvtuRuEh0jxEhA2UTAl6KbpcUwff9S4huPQmJWEC1Px3/9/J106rt/TLoDKUABAAAAAACIQI3K/m5u8B9sw33y7+rryWSU8fMHe2lOCuLlVsPj3r3pgN6AUkAAQACIL+vqU644RS3UJXQrOaGM50+tQvgD4FKniYSXU0+uPAaBCIAAP//////////////////////////////////////////AicAAQACIgAA//////////////////////////////////////////8FBADAAQEN/QFOA6UABAAAAAICIQKdduJO68wj8q4t0El3US2r3Jv8RaCPKegGybH+dotn2AN6AUkAAQACIL+vqU644RS3UJXQrOaGM50+tQvgD4FKniYSXU0+uPAaBCIAAP//////////////////////////////////////////AicAAQACIgAA//////////////////////////////////////////8FBADAAQF3AAQAAAADAiECrlX4aHDxCYQOkF66cz+iW8Mbdj8klIK3zpN2KpsLjR4FTAFBARqsJUCKTSgjPNMl+u+t6e8Prnb8seNdCBQARbuqOBsw7vRuRjA1VmAu8TzvXS//Pcai7OZlf8keSwpbui3tTv8DBADAAQIEAQEuAAQAAAAEAiECNMRdtB31mzfE7bm6QkP7+dW0STw/tQdWi6dptA/0FrQFAwQBAQ+fAAQAAAAEAiEC3DSUSNywYyaZaAbttpBj5yJY+cEct5LWT8co3tD8+TwDdAFJAAEAAiC/r6lOuOEUt1CV0KzmhjOdPrUL4A+BSp4mEl1NPrjwGgQiAAD//////////////////////////////////////////wInAAEAAiIAAP//////////////////////////////////////////ER4AAQACGXF1b3RoIHRoZSByYXZlbiBuZXZlcm1vcmUVCQIDZm9vA2JhchYEAAAAKheKmiZvl2R5Szc5cBFegu1vQSXI+nMR5Nfe+pItqud4Zme+jpmBQDdmMDFm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MRuUdSDC1RS8VyXctAH/////AQDyBSoBAAAAGXapFPFdGSH1LkAHsUbfpg82ntL8OTziiKwAAAAACIIEo/OsYF1eRyf06nLpNGpdWG8CMUYP1SrZiVvIJA2HHe9SLbM5wYbBFJhDpISJkObduaYGX0vBQir1P0vIbxsISokYn/AxbNwQUR2nHadX5VPK2p87WxQ085I2c621fYPKrDksOK8VbW/DC1X61BEt8rlVMeaBFOmtEAEecve3z9sOCv0BlgABAAKKmiZvl2R5Szc5cBFegu1vQSXI+nMR5Nfe+pItqud4Zme+jpmBQDdmMDFmMWY1NzM5ODE2NTlhNDRmZjE3YTRjNzIxNWEzYjUzOWViMWU1ODQ5YzYwNzdkYmI1NzIyZjU3MTdhMjh/AfH1c5gWWaRP8XpMchWjtTnrHlhJxgd9u1ci9XF6KCRPzTYABAEABgEBBwP9BTkJAQYLrQGrAWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCAUCJI8u0c2iGdy9FbCgdCT+ftrwxQtYAlv8YRRDPZpVTX3kqZ2SEq5Ge16nmb5Yy6kINzjmI2PBoJyFi8rv4hw5DDgIAABAhAl/PjPe6LLlXOV0XjvptgCE9wAR4ljra2kW+25G4SHSPESEDZRMCXopulxTB9/1LiG49CYlYQLU/Hf/38nXTqu39MugMpQAEAAAAAAIhAjcr+bm7wH2zDffLv6uvJZJTx8wd7aU4K4uVWw+PevemA3oBSQABAAIgv6+pTrjhFLdQldCs5oYznT61C+APgUqeJhJdTT648BoEIgAA//////////////////////////////////////////8CJwABAAIiAAD//////////////////////////////////////////wUEAMABAQ39AU4DpQAEAAAAAgIhAp124k7rzCPyri3QSXdRLavcm/xFoI8p6AbJsf52i2fYA3oBSQABAAIgv6+pTrjhFLdQldCs5oYznT61C+APgUqeJhJdTT648BoEIgAA//////////////////////////////////////////8CJwABAAIiAAD//////////////////////////////////////////wUEAMABAXcABAAAAAMCIQKuVfhocPEJhA6QXrpzP6Jbwxt2PySUgrfOk3YqmwuNHgVMAUEBGqwlQIpNKCM80yX6763p7w+udvyx410IFABFu6o4GzDu9G5GMDVWYC7xPO9dL/89xqLs5mV/yR5LClu6Le1O/wMEAMABAgQBAS4ABAAAAAQCIQI0xF20HfWbN8TtubpCQ/v51bRJPD+1B1aLp2m0D/QWtAUDBAEBD58ABAAAAAQCIQLcNJRI3LBjJploBu22kGPnIlj5wRy3ktZPxyje0Pz5PAN0AUkAAQACIL+vqU644RS3UJXQrOaGM50+tQvgD4FKniYSXU0+uPAaBCIAAP//////////////////////////////////////////AicAAQACIgAA//////////////////////////////////////////8RHgABAAIZcXVvdGggdGhlIHJhdmVuIG5ldmVybW9yZRUJAgNmb28DYmFyFgQAAAAqF4qaJm+XZHlLNzlwEV6C7W9BJcj6cxHk1976ki2q53hmZ76OmYFAN2YwMWYxZjU3Mzk4MTY1OWE0NGZmMTdhNGM3MjE1YTNiNTM5ZWIxZTU4NDljNjA3N2RiYjU3MjJmNTcxN2EyOH8B8fVzmBZZpE/xekxyFaO1OeseWEnGB327VyL1cXooJE/NNgAZQQNlEwJeim6XFMH3/UuIbj0JiVhAtT8d//fyddOq7f0y6HA5NL9Qoo2hApdd7ad+dYV56j3+QTar91KzuCcdA+lEAXwIAAAAAAAAAcgBfQgAAAAAAAABWQF+OwE5CxABDgMMAQp/9Lb0QJCjJxHzDgLZghAhAu2xosWZe3lIJCygLkcj3RxZ1nEL5vk1YEQJalSpWFGTAAFwAQEBcQEAAXIIAAAAAAAAAAEBcyECaXkt1TE9Jt/pROAdatig4MONta9H3q8VmBz53b3erBsidAJpeS3VMT0m3+lE4B1q2KDgw421r0ferxWYHPndvd6sGxgAAAAA+QMAgAAAAIB7AACAAAAAAMgBAAAhdWl5LdUxPSbf6UTgHWrYoODDjbWvR96vFZgc+d293qwbGQAAAAAA+QMAgAAAAIB7AACAAAAAAMgBAAABdv2SAQABAAKKDyZobTVM3hYH7ilLOfMrfHgiumT4SrQ8oMbmuRwf074m+/KbQGEwZjNjYTk5MzZlODQ2MWYxMGQ3N2M5NmVhODBhN2E2NjVmNjA2ZjZhNjNiN2YzZGZkMjU2N2MxODk3OWU0ZDag88qZNuhGHxDXfJbqgKemZfYG9qY7fz39JWfBiXnk1kFDkIkABAEABgX+bJxkuAutAasBZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0IBQGXcJ8AatOAwpcSVsLxwUPRJ2Pt5w9TFx0GKi1g6NoIyaTWVrHWfb6AhARcu8H19Zx3BkbWmhGgyLnBBZfmXvNIOAgAAECECPS9WsfxJN8QmtbZV4Q6nvPcDGG986VPms51VQmjl7L0RIQIT4XZuu7wcGMhqAkoc7giVxbY0nENllGwSiyRoVwx3IwF4QQEZfOItErxamVh1M69BFp+h3J/4ZsDU0wIRWNYpM2ctERl84i0SvFqZWHUzr0EWn6Hcn/hmwNTTAhFY1ikzZy0RAXkBAAF8CAAAAAAAAAAAAX0IAAAAAAAAAAABfosCRAsbARkDFwIK6DGxC3v1sVxHpQo9v459yvyeE4ZHDgI6ZhAhAg316Hdd7R1jFeTRFV1S6yBIV32yTStYCVj86ThEFotERAsbARkDFwIK6I/VgDFkkrSXUwq11QJ84VpPClglDgKO6BAhAiQxv8zaiv3EuxcTJpkiAGjyVIfW1mMZPMrcEzru/uC9AA==", "comment": "random packet" }, { @@ -927,7 +952,7 @@ { "bip32_derivation": [ { - "pub_key": "026eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "pub_key": "0218338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "fingerprint": 0, "bip32_path": [ 2147484665, @@ -940,7 +965,7 @@ ], "tr_bip32_derivation": [ { - "pub_key": "6eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "pub_key": "18338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "leaf_hashes": [], "fingerprint": 0, "bip32_path": [ @@ -952,23 +977,23 @@ ] } ], - "tr_internal_key": "6eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "tr_internal_key": "18338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "tr_merkle_root": "6d65726b6c6520726f6f74", "prev_id": { - "out_point": "82a42dd96e5aefbff5b2d5a1134b5ac059483870ad5ac8820932986a20af6b41:4261387314", - "asset_id": "ee26a586ad23139d5041723470bf24a865837c9123461c41f5ff99aa99ce24eb", - "script_key": "03f867341e5ed2ec4aad13f4167d81267f4d43ba41de2f8f314d628c2cde709f77" + "out_point": "a82947a67e52b1a000e8cb44095018fa6e04f9ce927b2709ebd9dda9ca82a42d:1536054953", + "asset_id": "e3336e65491622558fdf297b9fa007864bafd7cd4ca1b2fb5766ab431a032b72", + "script_key": "03e93f54f1c75aae5ffa11f60847f7f689c0d8fe5bac9dc3da51e51741e0f3ca77" }, "anchor": { "value": 777, "pk_script": "616e63686f7220706b736372697074", "sig_hash_type": 3, - "internal_key": "026eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "internal_key": "0218338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "merkle_root": "6d65726b6c6520726f6f74", "tapscript_sibling": "7369626c696e67", "bip32_derivation": [ { - "pub_key": "026eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "pub_key": "0218338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "fingerprint": 0, "bip32_path": [ 2147484665, @@ -981,7 +1006,7 @@ ], "tr_bip32_derivation": [ { - "pub_key": "6eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "pub_key": "18338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "leaf_hashes": [], "fingerprint": 0, "bip32_path": [ @@ -995,13 +1020,13 @@ ] }, "asset": { - "version": 1, - "genesis_first_prev_out": "aaab031f765a41e67230b027b7e0fc24541c3b6bd9c19e7792417fc3a82947a6:1240912481", - "genesis_tag": "caa9568e5b6fe9d8a9ddd9eb09277b92cef9046efa18500944cbe800a0b1527e", - "genesis_meta_hash": "caa9568e5b6fe9d8a9ddd9eb09277b92cef9046efa18500944cbe800a0b1527e", - "genesis_output_index": 1154067264, + "version": 0, + "genesis_first_prev_out": "7ffe7f03e3abff4a8eb1ac99b757885ddb0efd7a84af6747c045d99121aaab03:1154067264", + "genesis_tag": "61d2f6497a3235c37f4192779ec1d96b3b1c5424fce0b727b03072e6415a761f", + "genesis_meta_hash": "61d2f6497a3235c37f4192779ec1d96b3b1c5424fce0b727b03072e6415a761f", + "genesis_output_index": 1936605644, "genesis_type": 0, - "amount": 1936605645, + "amount": 2630800099, "lock_time": 0, "relative_lock_time": 0, "prev_witnesses": [ @@ -1012,21 +1037,21 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "6ba3d70a509d4604ac4c0217b26242e756a66ebb0608dd81d83072b697a00c79c4e1e7d2a854321db63ba244f1caa998eda7decf0748500ae49602589b29eb61" + "f1087193adbd11e1a20f891644f6bd59f675721568c2d80d09cd5a5a789145d7e199ed26f31ee4fa3d5d87e7f2b1e45ef8f53fd2596e6e4ff346f4fba82e486b" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02bbe5a56108947460be11d0c5d3cc3d0ae353d48ae850fb19b8cf68417a281f1d", + "script_key": "023b87382b493cecec2999fc7e7e140a1797493bf97be5c221e39113942f65c595", "group_key": { - "group_key": "032094cd41c5f688c57534d3c2d00f02e4b5cd80a93572dce9e78815a9f22d4192" + "group_key": "02eca6e78ede6f8b2f59863866d25c3c48bbafc08276b79be334a2a1b7331d4595" }, "unknown_odd_types": null }, "proof": { - "prev_out": "aaab031f765a41e67230b027b7e0fc24541c3b6bd9c19e7792417fc3a82947a6:1240912481", + "prev_out": "7ffe7f03e3abff4a8eb1ac99b757885ddb0efd7a84af6747c045d99121aaab03:1154067264", "block_header": { "version": 1, "prev_block": "00000000000080b66c911bd5ba14a74260057311eaeb1982802f7010f1a9f090", @@ -1053,10 +1078,10 @@ }, "asset": { "version": 0, - "genesis_first_prev_out": "aaab031f765a41e67230b027b7e0fc24541c3b6bd9c19e7792417fc3a82947a6:1240912481", - "genesis_tag": "caa9568e5b6fe9d8a9ddd9eb09277b92cef9046efa18500944cbe800a0b1527e", - "genesis_meta_hash": "caa9568e5b6fe9d8a9ddd9eb09277b92cef9046efa18500944cbe800a0b1527e", - "genesis_output_index": 1154067264, + "genesis_first_prev_out": "7ffe7f03e3abff4a8eb1ac99b757885ddb0efd7a84af6747c045d99121aaab03:1154067264", + "genesis_tag": "61d2f6497a3235c37f4192779ec1d96b3b1c5424fce0b727b03072e6415a761f", + "genesis_meta_hash": "61d2f6497a3235c37f4192779ec1d96b3b1c5424fce0b727b03072e6415a761f", + "genesis_output_index": 1936605644, "genesis_type": 0, "amount": 1, "lock_time": 1337, @@ -1069,28 +1094,28 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "dc5abf2f9f946530ba8773492ad94a0255847ace62a6c209892f1adf946a5d326e68894d0c2b4805e2638999ae29b91d207d5f01d153b47265d62c3fce101a5e" + "33eeed2295c88cc240f64f473d945bd2869424d9bae02912e4fb730aee7934e32f09341596e083301006ed6b5061b730150cc4ec2dcf0bdf1c0ec0c118398040" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02988c517add66938e90962cedc38b8633cf70dec970df94642c65a18b851d8b06", + "script_key": "02226d60ad512bd4af6073b73f02abe8faa1f6d6569eedc17f844fbfb9c0cb0956", "group_key": { - "group_key": "03494cfffa38e87ad81e702d0348dde21a29d1a838176fc4c416b6594b779f771e" + "group_key": "02e2bd4566c4587adbe8dd6f6f8f51c7cf66d1b713c4c7cb73a9121b4c68edbb1a" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "02c2fef40aab5ab695af78f21c090072a295b4b37927bff672d82df04b39a0f859", + "internal_key": "02d8f5ecaf04e58134181a490a94f7094a941d167ef39efe3cb50f157f925b11ae", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "6579ab84254c95d14a40dfc4febe5726975b95d72b7c3b92b67482eddecbb6ae", + "tap_key": "a90cffe9164b4b364a18af73321ab82e16ec90c0a226b7e66865b02276c405fe", "unknown_odd_types": null }, "taproot_asset_proof": { @@ -1109,13 +1134,13 @@ "exclusion_proofs": [ { "output_index": 2, - "internal_key": "02d622989cb99a43b627bba2575e29aef649ec7110fced3debf9fb1c56ed0bf5e8", + "internal_key": "02a724edf4531d5552e6fc42a65604599109675c2cc50d7580a70cb1fbe5b97ad7", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "6579ab84254c95d14a40dfc4febe5726975b95d72b7c3b92b67482eddecbb6ae", + "tap_key": "a90cffe9164b4b364a18af73321ab82e16ec90c0a226b7e66865b02276c405fe", "unknown_odd_types": null }, "taproot_asset_proof": { @@ -1133,7 +1158,7 @@ }, { "output_index": 3, - "internal_key": "02b5d17f66067232b2cc7bd021c6344eabe6d1642840e2adc920df729bd0e3c330", + "internal_key": "029d2b6d4dc641b169028da5d94b3bcaccf50e23c75d54b289f7262927d998ed4a", "commitment_proof": null, "tapscript_proof": { "tap_preimage_1": "011aac25408a4d28233cd325faefade9ef0fae76fcb1e35d08140045bbaa381b30eef46e46303556602ef13cef5d2fff3dc6a2ece6657fc91e4b0a5bba2ded4eff", @@ -1145,7 +1170,7 @@ }, { "output_index": 4, - "internal_key": "02457937aeab9bdd96381b2588905adb76e96de8875a125704693aaab9ddccebd1", + "internal_key": "027d637ee0d1c2d845b3a7c7391b86e71cf557ad772ee44e0e681ba279eb07ef91", "commitment_proof": null, "tapscript_proof": { "tap_preimage_1": "", @@ -1158,13 +1183,13 @@ ], "split_root_proof": { "output_index": 4, - "internal_key": "021ab6181e05bbe435d8ee3373866f0107ff0f71395ad02f81ac84b90e7c0ad480", + "internal_key": "02d3d679e2f23835d5e3fd402097c6f751172f9003f1985aed873689c14dfc8a39", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "6579ab84254c95d14a40dfc4febe5726975b95d72b7c3b92b67482eddecbb6ae", + "tap_key": "a90cffe9164b4b364a18af73321ab82e16ec90c0a226b7e66865b02276c405fe", "unknown_odd_types": null }, "taproot_asset_proof": { @@ -1191,16 +1216,17 @@ "626172" ], "genesis_reveal": { - "first_prev_out": "aaab031f765a41e67230b027b7e0fc24541c3b6bd9c19e7792417fc3a82947a6:1240912481", - "tag": "caa9568e5b6fe9d8a9ddd9eb09277b92cef9046efa18500944cbe800a0b1527e", - "meta_hash": "caa9568e5b6fe9d8a9ddd9eb09277b92cef9046efa18500944cbe800a0b1527e", - "output_index": 1154067264, + "first_prev_out": "7ffe7f03e3abff4a8eb1ac99b757885ddb0efd7a84af6747c045d99121aaab03:1154067264", + "tag": "61d2f6497a3235c37f4192779ec1d96b3b1c5424fce0b727b03072e6415a761f", + "meta_hash": "61d2f6497a3235c37f4192779ec1d96b3b1c5424fce0b727b03072e6415a761f", + "output_index": 1936605644, "type": 0 }, "group_key_reveal": { - "raw_key": "03494cfffa38e87ad81e702d0348dde21a29d1a838176fc4c416b6594b779f771e", - "tapscript_root": "e5e60c5ead6fc7ae77ba1d259b188a4b21c86fbc23d728b45347eada650af24c" + "raw_key": "02e2bd4566c4587adbe8dd6f6f8f51c7cf66d1b713c4c7cb73a9121b4c68edbb1a", + "tapscript_root": "8691332088a805bd55c446e25eb07590bafcccbec6177536401d9a2b7f512b54" }, + "alt_leaves": null, "unknown_odd_types": null }, "alt_leaves": [ @@ -1217,13 +1243,98 @@ "prev_witnesses": [ { "prev_id": null, - "tx_witness": null, + "tx_witness": [ + "9843d53171c8fef7f1f4", + "e4613bb365b2ebb44f0f", + "fb6907136385cdc838f0" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 31775, + "script_key": "02a5b8d03d81b89ebbf866c294e8f6d0ffc6710aeb5c8db47b2cf00a45babef792", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "4c887ed3a4fe16fafce2", + "3623e196c9dfff7fbaff", + "4ffe94f4589733e563e1", + "9d3045aad3e226488ac0" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 23824, + "script_key": "028513f23304e05a8ca6347c5b2aabc636b0f235b55bbf37888708c1db0516d0c1", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "0710c9d0096e5e3ef1b5", + "70680746acd0cc776033" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 45625, + "script_key": "029d1b1ed2c7d66ec8f3ef9bdd466e3e677270618b4411886b1b7c2a16f4336d59", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "7ac65e502d506bd8b82c", + "30d346bc4b2fa319f245", + "a8657ec122eaf4ad5425" + ], "split_commitment": null } ], "split_commitment_root": null, - "script_version": 12757, - "script_key": "02d8d08c6a25074e4c0509e205f70e6e87c555fbcc8096e4d5dedc230aaa1432a9", + "script_version": 14196, + "script_key": "02bd2191fd22bd17394008655e6227c3ee28366f741e581e4faeb04f314a3630f6", "group_key": null, "unknown_odd_types": null } @@ -1261,10 +1372,10 @@ "asset_version": 1, "interactive": true, "anchor_output_index": 0, - "anchor_output_internal_key": "026eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "anchor_output_internal_key": "0218338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "anchor_output_bip32_derivation": [ { - "pub_key": "026eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "pub_key": "0218338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "fingerprint": 0, "bip32_path": [ 2147484665, @@ -1277,7 +1388,7 @@ ], "anchor_output_tr_bip32_derivation": [ { - "pub_key": "6eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "pub_key": "18338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "leaf_hashes": [], "fingerprint": 0, "bip32_path": [ @@ -1291,13 +1402,13 @@ ], "anchor_output_tapscript_sibling": "00c0126e6f7420612076616c696420736372697074", "asset": { - "version": 1, - "genesis_first_prev_out": "310facd9f5511802781b6a22b648e604214064018153da939bb8b580c8ba3ffa:665237637", - "genesis_tag": "0fea1931a290220777a93143dfdcbfa68406e877073ff08834e197a4034aa48a", - "genesis_meta_hash": "0fea1931a290220777a93143dfdcbfa68406e877073ff08834e197a4034aa48a", - "genesis_output_index": 1921998668, + "version": 0, + "genesis_first_prev_out": "8831427ae37ae39d02db275a873cc0ea9b9ec18437f5198bb389ac728f5f4cac:2302292239", + "genesis_tag": "a62708caebbac880b5b89b93da53810164402104e648b6226a1b78021851f5d9", + "genesis_meta_hash": "a62708caebbac880b5b89b93da53810164402104e648b6226a1b78021851f5d9", + "genesis_output_index": 3394868114, "genesis_type": 0, - "amount": 3394868115, + "amount": 3087187453, "lock_time": 0, "relative_lock_time": 0, "prev_witnesses": [ @@ -1308,27 +1419,27 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "f4b9eff014d1e8f3699b00437c743d762627d3a34c4c5d66f8d71ab4a66d6cc068990b24bea7f30b86a828554542b85305ec391b1fcb0b9cef8801079eeb6cbb" + "27b00a9fd86465b020432776de2d1fe8106ead9f1db0ceae313d9cf0a4229bc69c1332ff4c650c740f3efe9c860199d7b41b4531b1d61daf0d77cfd737269a14" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02bc0017e914e77d7bba59d38803af2d7b9a75952df7e5bab1ce02c03b63091b7c", + "script_key": "020195c5dba06521d045c88c49523197721e0bdbfa0e89b5c4499f6c4237632996", "group_key": { - "group_key": "03075407d639e4d96f69bb9d8c55fc2f0db2a291d1cde664fec71bd3927d4ddd86" + "group_key": "0228b6c2aee604b00f3209665ef3ba67bede4d8b2ba96a64906c3c8eace558dd44" }, "unknown_odd_types": null }, "split_asset": { - "version": 1, - "genesis_first_prev_out": "310facd9f5511802781b6a22b648e604214064018153da939bb8b580c8ba3ffa:665237637", - "genesis_tag": "0fea1931a290220777a93143dfdcbfa68406e877073ff08834e197a4034aa48a", - "genesis_meta_hash": "0fea1931a290220777a93143dfdcbfa68406e877073ff08834e197a4034aa48a", - "genesis_output_index": 1921998668, + "version": 0, + "genesis_first_prev_out": "8831427ae37ae39d02db275a873cc0ea9b9ec18437f5198bb389ac728f5f4cac:2302292239", + "genesis_tag": "a62708caebbac880b5b89b93da53810164402104e648b6226a1b78021851f5d9", + "genesis_meta_hash": "a62708caebbac880b5b89b93da53810164402104e648b6226a1b78021851f5d9", + "genesis_output_index": 3394868114, "genesis_type": 0, - "amount": 3394868115, + "amount": 3087187453, "lock_time": 0, "relative_lock_time": 0, "prev_witnesses": [ @@ -1339,27 +1450,27 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "f4b9eff014d1e8f3699b00437c743d762627d3a34c4c5d66f8d71ab4a66d6cc068990b24bea7f30b86a828554542b85305ec391b1fcb0b9cef8801079eeb6cbb" + "27b00a9fd86465b020432776de2d1fe8106ead9f1db0ceae313d9cf0a4229bc69c1332ff4c650c740f3efe9c860199d7b41b4531b1d61daf0d77cfd737269a14" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02bc0017e914e77d7bba59d38803af2d7b9a75952df7e5bab1ce02c03b63091b7c", + "script_key": "020195c5dba06521d045c88c49523197721e0bdbfa0e89b5c4499f6c4237632996", "group_key": { - "group_key": "03075407d639e4d96f69bb9d8c55fc2f0db2a291d1cde664fec71bd3927d4ddd86" + "group_key": "0228b6c2aee604b00f3209665ef3ba67bede4d8b2ba96a64906c3c8eace558dd44" }, "unknown_odd_types": null }, - "pk_script": "5120bc0017e914e77d7bba59d38803af2d7b9a75952df7e5bab1ce02c03b63091b7c", + "pk_script": "51200195c5dba06521d045c88c49523197721e0bdbfa0e89b5c4499f6c4237632996", "bip32_derivation": null, "tr_bip32_derivation": null, "tr_internal_key": "", "tr_merkle_root": "", "proof_delivery_address": "https://example.com", "proof_suffix": { - "prev_out": "aaab031f765a41e67230b027b7e0fc24541c3b6bd9c19e7792417fc3a82947a6:1240912481", + "prev_out": "7ffe7f03e3abff4a8eb1ac99b757885ddb0efd7a84af6747c045d99121aaab03:1154067264", "block_header": { "version": 1, "prev_block": "00000000000080b66c911bd5ba14a74260057311eaeb1982802f7010f1a9f090", @@ -1386,10 +1497,10 @@ }, "asset": { "version": 0, - "genesis_first_prev_out": "aaab031f765a41e67230b027b7e0fc24541c3b6bd9c19e7792417fc3a82947a6:1240912481", - "genesis_tag": "caa9568e5b6fe9d8a9ddd9eb09277b92cef9046efa18500944cbe800a0b1527e", - "genesis_meta_hash": "caa9568e5b6fe9d8a9ddd9eb09277b92cef9046efa18500944cbe800a0b1527e", - "genesis_output_index": 1154067264, + "genesis_first_prev_out": "7ffe7f03e3abff4a8eb1ac99b757885ddb0efd7a84af6747c045d99121aaab03:1154067264", + "genesis_tag": "61d2f6497a3235c37f4192779ec1d96b3b1c5424fce0b727b03072e6415a761f", + "genesis_meta_hash": "61d2f6497a3235c37f4192779ec1d96b3b1c5424fce0b727b03072e6415a761f", + "genesis_output_index": 1936605644, "genesis_type": 0, "amount": 1, "lock_time": 1337, @@ -1402,28 +1513,28 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "dc5abf2f9f946530ba8773492ad94a0255847ace62a6c209892f1adf946a5d326e68894d0c2b4805e2638999ae29b91d207d5f01d153b47265d62c3fce101a5e" + "33eeed2295c88cc240f64f473d945bd2869424d9bae02912e4fb730aee7934e32f09341596e083301006ed6b5061b730150cc4ec2dcf0bdf1c0ec0c118398040" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02988c517add66938e90962cedc38b8633cf70dec970df94642c65a18b851d8b06", + "script_key": "02226d60ad512bd4af6073b73f02abe8faa1f6d6569eedc17f844fbfb9c0cb0956", "group_key": { - "group_key": "03494cfffa38e87ad81e702d0348dde21a29d1a838176fc4c416b6594b779f771e" + "group_key": "02e2bd4566c4587adbe8dd6f6f8f51c7cf66d1b713c4c7cb73a9121b4c68edbb1a" }, "unknown_odd_types": null }, "inclusion_proof": { "output_index": 0, - "internal_key": "02c2fef40aab5ab695af78f21c090072a295b4b37927bff672d82df04b39a0f859", + "internal_key": "02d8f5ecaf04e58134181a490a94f7094a941d167ef39efe3cb50f157f925b11ae", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "6579ab84254c95d14a40dfc4febe5726975b95d72b7c3b92b67482eddecbb6ae", + "tap_key": "a90cffe9164b4b364a18af73321ab82e16ec90c0a226b7e66865b02276c405fe", "unknown_odd_types": null }, "taproot_asset_proof": { @@ -1442,13 +1553,13 @@ "exclusion_proofs": [ { "output_index": 2, - "internal_key": "02d622989cb99a43b627bba2575e29aef649ec7110fced3debf9fb1c56ed0bf5e8", + "internal_key": "02a724edf4531d5552e6fc42a65604599109675c2cc50d7580a70cb1fbe5b97ad7", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "6579ab84254c95d14a40dfc4febe5726975b95d72b7c3b92b67482eddecbb6ae", + "tap_key": "a90cffe9164b4b364a18af73321ab82e16ec90c0a226b7e66865b02276c405fe", "unknown_odd_types": null }, "taproot_asset_proof": { @@ -1466,7 +1577,7 @@ }, { "output_index": 3, - "internal_key": "02b5d17f66067232b2cc7bd021c6344eabe6d1642840e2adc920df729bd0e3c330", + "internal_key": "029d2b6d4dc641b169028da5d94b3bcaccf50e23c75d54b289f7262927d998ed4a", "commitment_proof": null, "tapscript_proof": { "tap_preimage_1": "011aac25408a4d28233cd325faefade9ef0fae76fcb1e35d08140045bbaa381b30eef46e46303556602ef13cef5d2fff3dc6a2ece6657fc91e4b0a5bba2ded4eff", @@ -1478,7 +1589,7 @@ }, { "output_index": 4, - "internal_key": "02457937aeab9bdd96381b2588905adb76e96de8875a125704693aaab9ddccebd1", + "internal_key": "027d637ee0d1c2d845b3a7c7391b86e71cf557ad772ee44e0e681ba279eb07ef91", "commitment_proof": null, "tapscript_proof": { "tap_preimage_1": "", @@ -1491,13 +1602,13 @@ ], "split_root_proof": { "output_index": 4, - "internal_key": "021ab6181e05bbe435d8ee3373866f0107ff0f71395ad02f81ac84b90e7c0ad480", + "internal_key": "02d3d679e2f23835d5e3fd402097c6f751172f9003f1985aed873689c14dfc8a39", "commitment_proof": { "proof": { "asset_proof": { "proof": "0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "version": 0, - "tap_key": "6579ab84254c95d14a40dfc4febe5726975b95d72b7c3b92b67482eddecbb6ae", + "tap_key": "a90cffe9164b4b364a18af73321ab82e16ec90c0a226b7e66865b02276c405fe", "unknown_odd_types": null }, "taproot_asset_proof": { @@ -1524,16 +1635,17 @@ "626172" ], "genesis_reveal": { - "first_prev_out": "aaab031f765a41e67230b027b7e0fc24541c3b6bd9c19e7792417fc3a82947a6:1240912481", - "tag": "caa9568e5b6fe9d8a9ddd9eb09277b92cef9046efa18500944cbe800a0b1527e", - "meta_hash": "caa9568e5b6fe9d8a9ddd9eb09277b92cef9046efa18500944cbe800a0b1527e", - "output_index": 1154067264, + "first_prev_out": "7ffe7f03e3abff4a8eb1ac99b757885ddb0efd7a84af6747c045d99121aaab03:1154067264", + "tag": "61d2f6497a3235c37f4192779ec1d96b3b1c5424fce0b727b03072e6415a761f", + "meta_hash": "61d2f6497a3235c37f4192779ec1d96b3b1c5424fce0b727b03072e6415a761f", + "output_index": 1936605644, "type": 0 }, "group_key_reveal": { - "raw_key": "03494cfffa38e87ad81e702d0348dde21a29d1a838176fc4c416b6594b779f771e", - "tapscript_root": "e5e60c5ead6fc7ae77ba1d259b188a4b21c86fbc23d728b45347eada650af24c" + "raw_key": "02e2bd4566c4587adbe8dd6f6f8f51c7cf66d1b713c4c7cb73a9121b4c68edbb1a", + "tapscript_root": "8691332088a805bd55c446e25eb07590bafcccbec6177536401d9a2b7f512b54" }, + "alt_leaves": null, "unknown_odd_types": null }, "relative_lock_time": 345, @@ -1553,14 +1665,16 @@ { "prev_id": null, "tx_witness": [ - "9ed9d20d573a136385cd" + "636613a9cc9441033aa5", + "baf40d45e24d72eac4a2", + "8e3ca030c9937ab8409a" ], "split_commitment": null } ], "split_commitment_root": null, - "script_version": 31775, - "script_key": "02e296f64f2da07ce9bd2a5a2b7b72e9d9e7df03f2b7fdc3bc491936b7c6df1cb1", + "script_version": 35806, + "script_key": "0263592a9a7324a7f67d8f6d28713b4b2b225849f902d3c23301a1de74ceb6ef56", "group_key": null, "unknown_odd_types": null }, @@ -1578,17 +1692,17 @@ { "prev_id": null, "tx_witness": [ - "aa1cc84c887ed3a4fe16", - "fafce23623e196c9dfff", - "7fbaff4ffe94f4589733", - "e563e19d3045aad3e226" + "00dae4e2e5df8cf3859e", + "bddada6745fba6a04c5c", + "37c7ca35036f11732ce8", + "bc27b48868611fc73c82" ], "split_commitment": null } ], "split_commitment_root": null, - "script_version": 23824, - "script_key": "02dedc4882998beb8bba54bf3580a8431b8423673a9145e7c310d8634b68c11ff9", + "script_version": 8804, + "script_key": "02144f77ccade22a51d1bca06affbafbe1cd7a0fa7c0affa98b7cea751a305d297", "group_key": null, "unknown_odd_types": null }, @@ -1606,15 +1720,42 @@ { "prev_id": null, "tx_witness": [ - "09c4db0710c9d0096e5e", - "3ef1b570680746acd0cc" + "cd5961e19be037c68bf7", + "c5e5de1d2c68192348ec", + "1189fb2e36973cef09ff", + "14be23922801f6eaee41" ], "split_commitment": null } ], "split_commitment_root": null, - "script_version": 43968, - "script_key": "02882e716a0fccf328b3a59fea652af80965ad8f54bd6b5da8141df402f7a3b456", + "script_version": 8023, + "script_key": "0293376e4d32a56c3b249be8eda21d214c5ddff0cba414a914e4675c574595e631", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "95e69f69c2ec7f4057b3" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 8506, + "script_key": "0239b7f7b14160b01375ee2f78d97b665649833c368ff19aa3191136a207bcd797", "group_key": null, "unknown_odd_types": null } @@ -1623,13 +1764,13 @@ { "amount": 345, "type": 1, - "asset_version": 0, + "asset_version": 1, "interactive": false, "anchor_output_index": 1, - "anchor_output_internal_key": "026eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "anchor_output_internal_key": "0218338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "anchor_output_bip32_derivation": [ { - "pub_key": "026eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "pub_key": "0218338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "fingerprint": 0, "bip32_path": [ 2147484665, @@ -1642,7 +1783,7 @@ ], "anchor_output_tr_bip32_derivation": [ { - "pub_key": "6eff82cc09998c8f7aa1d21230c4416d25c9f00dffdc24cca06ef3586aeb6ef6", + "pub_key": "18338b3b842934f90de520ed50b4eed815843381595dc2e8ac4c5c18786441b6", "leaf_hashes": [], "fingerprint": 0, "bip32_path": [ @@ -1656,13 +1797,13 @@ ], "anchor_output_tapscript_sibling": "01197ce22d12bc5a99587533af41169fa1dc9ff866c0d4d3021158d62933672d11197ce22d12bc5a99587533af41169fa1dc9ff866c0d4d3021158d62933672d11", "asset": { - "version": 1, - "genesis_first_prev_out": "310facd9f5511802781b6a22b648e604214064018153da939bb8b580c8ba3ffa:665237637", - "genesis_tag": "0fea1931a290220777a93143dfdcbfa68406e877073ff08834e197a4034aa48a", - "genesis_meta_hash": "0fea1931a290220777a93143dfdcbfa68406e877073ff08834e197a4034aa48a", - "genesis_output_index": 1921998668, + "version": 0, + "genesis_first_prev_out": "8831427ae37ae39d02db275a873cc0ea9b9ec18437f5198bb389ac728f5f4cac:2302292239", + "genesis_tag": "a62708caebbac880b5b89b93da53810164402104e648b6226a1b78021851f5d9", + "genesis_meta_hash": "a62708caebbac880b5b89b93da53810164402104e648b6226a1b78021851f5d9", + "genesis_output_index": 3394868114, "genesis_type": 0, - "amount": 3394868115, + "amount": 3087187453, "lock_time": 0, "relative_lock_time": 0, "prev_witnesses": [ @@ -1673,21 +1814,21 @@ "script_key": "000000000000000000000000000000000000000000000000000000000000000000" }, "tx_witness": [ - "f4b9eff014d1e8f3699b00437c743d762627d3a34c4c5d66f8d71ab4a66d6cc068990b24bea7f30b86a828554542b85305ec391b1fcb0b9cef8801079eeb6cbb" + "27b00a9fd86465b020432776de2d1fe8106ead9f1db0ceae313d9cf0a4229bc69c1332ff4c650c740f3efe9c860199d7b41b4531b1d61daf0d77cfd737269a14" ], "split_commitment": null } ], "split_commitment_root": null, "script_version": 0, - "script_key": "02bc0017e914e77d7bba59d38803af2d7b9a75952df7e5bab1ce02c03b63091b7c", + "script_key": "020195c5dba06521d045c88c49523197721e0bdbfa0e89b5c4499f6c4237632996", "group_key": { - "group_key": "03075407d639e4d96f69bb9d8c55fc2f0db2a291d1cde664fec71bd3927d4ddd86" + "group_key": "0228b6c2aee604b00f3209665ef3ba67bede4d8b2ba96a64906c3c8eace558dd44" }, "unknown_odd_types": null }, "split_asset": null, - "pk_script": "5120bc0017e914e77d7bba59d38803af2d7b9a75952df7e5bab1ce02c03b63091b7c", + "pk_script": "51200195c5dba06521d045c88c49523197721e0bdbfa0e89b5c4499f6c4237632996", "bip32_derivation": null, "tr_bip32_derivation": null, "tr_internal_key": "", @@ -1711,16 +1852,95 @@ { "prev_id": null, "tx_witness": [ - "01506bd8b82c30d346bc", - "4b2fa319f245a8657ec1", - "22eaf4ad5425c249ee16" + "4a8738aa2df04715d879", + "279a96879a4f3690ac20" ], "split_commitment": null } ], "split_commitment_root": null, - "script_version": 14196, - "script_key": "02c5a233ffb99f1ca7f2bafb04508177e05e80cf1dc16ecdc441b4a38a5942eef0", + "script_version": 32589, + "script_key": "02ff58c8a83e152804f5a721a8d5f8307e35368f76c84bbb381bc3c8701ec0ef39", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "e1a3425ead69d4f97501" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 20726, + "script_key": "02548aeda43efb8a03b27431e3a3ee31d54bbbd24e78ca56fc2cf07f8b5ccfe0cc", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "8bc20ee526741539fa32", + "03c77ecba410fd6718f2", + "27e0b430f9bcb049a3d3", + "8540dc222969120ce80f" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 13689, + "script_key": "024296e51bd65ac1b47539bd7530f11ae1646a9c50debd599bb3e8b9288b73a390", + "group_key": null, + "unknown_odd_types": null + }, + { + "version": 0, + "genesis_first_prev_out": "0000000000000000000000000000000000000000000000000000000000000000:0", + "genesis_tag": "", + "genesis_meta_hash": "0000000000000000000000000000000000000000000000000000000000000000", + "genesis_output_index": 0, + "genesis_type": 0, + "amount": 0, + "lock_time": 0, + "relative_lock_time": 0, + "prev_witnesses": [ + { + "prev_id": null, + "tx_witness": [ + "2cee5e71c4e55a20f1b9", + "f97d0462961246219287", + "39a86671cc180152b953" + ], + "split_commitment": null + } + ], + "split_commitment_root": null, + "script_version": 32954, + "script_key": "028417803c127865e704a98be521f0d6f81b5e3622dd800234f0b2ff7321bf4075", "group_key": null, "unknown_odd_types": null } @@ -1730,7 +1950,7 @@ "version": 0, "chain_params_hrp": "tapbc" }, - "expected": "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QgFA3Fq/L5+UZTC6h3NJKtlKAlWEes5ipsIJiS8a35RqXTJuaIlNDCtIBeJjiZmuKbkdIH1fAdFTtHJl1iw/zhAaXg4CAAAQIQKYjFF63WaTjpCWLO3Di4Yzz3DeyXDflGQsZaGLhR2LBhEhA0lM//o46HrYHnAtA0jd4hop0ag4F2/ExBa2WUt3n3ceDKUABAAAAAACIQLC/vQKq1q2la948hwJAHKilbSzeSe/9nLYLfBLOaD4WQN6AUkAAQACIGV5q4QlTJXRSkDfxP6+VyaXW5XXK3w7krZ0gu3ey7auBCIAAP//////////////////////////////////////////AicAAQACIgAA//////////////////////////////////////////8FBADAAQEN/QFOA6UABAAAAAICIQLWIpicuZpDtie7oldeKa72SexxEPztPev5+xxW7Qv16AN6AUkAAQACIGV5q4QlTJXRSkDfxP6+VyaXW5XXK3w7krZ0gu3ey7auBCIAAP//////////////////////////////////////////AicAAQACIgAA//////////////////////////////////////////8FBADAAQF3AAQAAAADAiECtdF/ZgZyMrLMe9AhxjROq+bRZChA4q3JIN9ym9DjwzAFTAFBARqsJUCKTSgjPNMl+u+t6e8Prnb8seNdCBQARbuqOBsw7vRuRjA1VmAu8TzvXS//Pcai7OZlf8keSwpbui3tTv8DBADAAQIEAQEuAAQAAAAEAiECRXk3rqub3ZY4GyWIkFrbdult6IdaElcEaTqqud3M69EFAwQBAQ+fAAQAAAAEAiECGrYYHgW75DXY7jNzhm8BB/8PcTla0C+BrIS5DnwK1IADdAFJAAEAAiBleauEJUyV0UpA38T+vlcml1uV1yt8O5K2dILt3su2rgQiAAD//////////////////////////////////////////wInAAEAAiIAAP//////////////////////////////////////////ER4AAQACGXF1b3RoIHRoZSByYXZlbiBuZXZlcm1vcmUVCQIDZm9vA2JhchYEAAAAKheKpkcpqMN/QZJ3nsHZazscVCT84LcnsDBy5kFadh8Dq6pJ9tJhQGNhYTk1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MeaBFOmtEAEecve3z9sOCv0BlgABAAKKpkcpqMN/QZJ3nsHZazscVCT84LcnsDBy5kFadh8Dq6pJ9tJhQGNhYTk1NjhlNWI2ZmU5ZDhhOWRkZDllYjA5Mjc3YjkyY2VmOTA0NmVmYTE4NTAwOTQ0Y2JlODAwYTBiMTUyN2XKqVaOW2/p2Knd2esJJ3uSzvkEbvoYUAlEy+gAoLFSfkTJq0AABAEABgEBBwP9BTkJAQYLrQGrAWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCAUDcWr8vn5RlMLqHc0kq2UoCVYR6zmKmwgmJLxrflGpdMm5oiU0MK0gF4mOJma4puR0gfV8B0VO0cmXWLD/OEBpeDgIAABAhApiMUXrdZpOOkJYs7cOLhjPPcN7JcN+UZCxloYuFHYsGESEDSUz/+jjoetgecC0DSN3iGinRqDgXb8TEFrZZS3efdx4MpQAEAAAAAAIhAsL+9AqrWraVr3jyHAkAcqKVtLN5J7/2ctgt8Es5oPhZA3oBSQABAAIgZXmrhCVMldFKQN/E/r5XJpdbldcrfDuStnSC7d7Ltq4EIgAA//////////////////////////////////////////8CJwABAAIiAAD//////////////////////////////////////////wUEAMABAQ39AU4DpQAEAAAAAgIhAtYimJy5mkO2J7uiV14prvZJ7HEQ/O096/n7HFbtC/XoA3oBSQABAAIgZXmrhCVMldFKQN/E/r5XJpdbldcrfDuStnSC7d7Ltq4EIgAA//////////////////////////////////////////8CJwABAAIiAAD//////////////////////////////////////////wUEAMABAXcABAAAAAMCIQK10X9mBnIyssx70CHGNE6r5tFkKEDirckg33Kb0OPDMAVMAUEBGqwlQIpNKCM80yX6763p7w+udvyx410IFABFu6o4GzDu9G5GMDVWYC7xPO9dL/89xqLs5mV/yR5LClu6Le1O/wMEAMABAgQBAS4ABAAAAAQCIQJFeTeuq5vdljgbJYiQWtt26W3oh1oSVwRpOqq53czr0QUDBAEBD58ABAAAAAQCIQIathgeBbvkNdjuM3OGbwEH/w9xOVrQL4GshLkOfArUgAN0AUkAAQACIGV5q4QlTJXRSkDfxP6+VyaXW5XXK3w7krZ0gu3ey7auBCIAAP//////////////////////////////////////////AicAAQACIgAA//////////////////////////////////////////8RHgABAAIZcXVvdGggdGhlIHJhdmVuIG5ldmVybW9yZRUJAgNmb28DYmFyFgQAAAAqF4qmRymow39BkneewdlrOxxUJPzgtyewMHLmQVp2HwOrqkn20mFAY2FhOTU2OGU1YjZmZTlkOGE5ZGRkOWViMDkyNzdiOTJjZWY5MDQ2ZWZhMTg1MDA5NDRjYmU4MDBhMGIxNTI3ZcqpVo5bb+nYqd3Z6wkne5LO+QRu+hhQCUTL6ACgsVJ+RMmrQAAZQQNJTP/6OOh62B5wLQNI3eIaKdGoOBdvxMQWtllLd593HuXmDF6tb8eud7odJZsYikshyG+8I9cotFNH6tplCvJMAXwIAAAAAAAAAcgBfQgAAAAAAAABWQF+2wM5CxABDgMMAQqe2dINVzoTY4XNDgJ8HxAhAuKW9k8toHzpvSpaK3ty6dnn3wPyt/3DvEkZNrfG3xyxWgsxAS8DLQQKqhzITIh+06T+Fgr6/OI2I+GWyd//Cn+6/0/+lPRYlzMK5WPhnTBFqtPiJg4CXRAQIQLe3EiCmYvri7pUvzWAqEMbhCNnOpFF58MQ2GNLaMEf+UQLGwEZAxcCCgnE2wcQydAJbl4KPvG1cGgHRqzQzA4Cq8AQIQKILnFqD8zzKLOln+plKvgJZa2PVL1rXagUHfQC96O0VgABcAEBAXEBAAFyCAAAAAAAAAABAXMhAm7/gswJmYyPeqHSEjDEQW0lyfAN/9wkzKBu81hq6272InQCbv+CzAmZjI96odISMMRBbSXJ8A3/3CTMoG7zWGrrbvYYAAAAAPkDAIAAAACAewAAgAAAAADIAQAAIXVu/4LMCZmMj3qh0hIwxEFtJcnwDf/cJMygbvNYautu9hkAAAAAAPkDAIAAAACAewAAgAAAAADIAQAAAXb9kgEAAQECivo/usiAtbibk9pTgQFkQCEE5ki2ImobeAIYUfXZrA8xJ6a4hUAwZmVhMTkzMWEyOTAyMjA3NzdhOTMxNDNkZmRjYmZhNjg0MDZlODc3MDczZmYwODgzNGUxOTdhNDAzNGFhNDhhD+oZMaKQIgd3qTFD39y/poQG6HcHP/CINOGXpANKpIpyj19MAAQBAAYF/spZk5MLrQGrAWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCAUD0ue/wFNHo82mbAEN8dD12JifTo0xMXWb41xq0pm1swGiZCyS+p/MLhqgoVUVCuFMF7DkbH8sLnO+IAQee62y7DgIAABAhArwAF+kU5317ulnTiAOvLXuadZUt9+W6sc4CwDtjCRt8ESEDB1QH1jnk2W9pu52MVfwvDbKikdHN5mT+xxvTkn1N3YYBeEEBGXziLRK8WplYdTOvQRafodyf+GbA1NMCEVjWKTNnLREZfOItErxamVh1M69BFp+h3J/4ZsDU0wIRWNYpM2ctEQF5AQABfAgAAAAAAAAAAAF9CAAAAAAAAAAAAX5RAU8LJgEkAyIDCgFQa9i4LDDTRrwKSy+jGfJFqGV+wQoi6vStVCXCSe4WDgI3dBAhAsWiM/+5nxyn8rr7BFCBd+BegM8dwW7NxEG0o4pZQu7wAA==", + "expected": "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QgFAM+7tIpXIjMJA9k9HPZRb0oaUJNm64CkS5PtzCu55NOMvCTQVluCDMBAG7WtQYbcwFQzE7C3PC98cDsDBGDmAQA4CAAAQIQIibWCtUSvUr2Bztz8Cq+j6ofbWVp7twX+ET7+5wMsJVhEhAuK9RWbEWHrb6N1vb49Rx89m0bcTxMfLc6kSG0xo7bsaDKUABAAAAAACIQLY9eyvBOWBNBgaSQqU9wlKlB0WfvOe/jy1DxV/klsRrgN6AUkAAQACIKkM/+kWS0s2ShivczIauC4W7JDAoia35mhlsCJ2xAX+BCIAAP//////////////////////////////////////////AicAAQACIgAA//////////////////////////////////////////8FBADAAQEN/QFOA6UABAAAAAICIQKnJO30Ux1VUub8QqZWBFmRCWdcLMUNdYCnDLH75bl61wN6AUkAAQACIKkM/+kWS0s2ShivczIauC4W7JDAoia35mhlsCJ2xAX+BCIAAP//////////////////////////////////////////AicAAQACIgAA//////////////////////////////////////////8FBADAAQF3AAQAAAADAiECnSttTcZBsWkCjaXZSzvKzPUOI8ddVLKJ9yYpJ9mY7UoFTAFBARqsJUCKTSgjPNMl+u+t6e8Prnb8seNdCBQARbuqOBsw7vRuRjA1VmAu8TzvXS//Pcai7OZlf8keSwpbui3tTv8DBADAAQIEAQEuAAQAAAAEAiECfWN+4NHC2EWzp8c5G4bnHPVXrXcu5E4OaBuieesH75EFAwQBAQ+fAAQAAAAEAiEC09Z54vI4NdXj/UAgl8b3URcvkAPxmFrthzaJwU38ijkDdAFJAAEAAiCpDP/pFktLNkoYr3MyGrguFuyQwKImt+ZoZbAidsQF/gQiAAD//////////////////////////////////////////wInAAEAAiIAAP//////////////////////////////////////////ER4AAQACGXF1b3RoIHRoZSByYXZlbiBuZXZlcm1vcmUVCQIDZm9vA2JhchYEAAAAKheKA6uqIZHZRcBHZ6+Eev0O212IV7eZrLGOSv+r4wN//n9EyatAQDYxZDJmNjQ5N2EzMjM1YzM3ZjQxOTI3NzllYzFkOTZiM2IxYzU0MjRmY2UwYjcyN2IwMzA3MmU2NDE1YTc2MWZh0vZJejI1w39BkneewdlrOxxUJPzgtyewMHLmQVp2H3NuQcwAGUEC4r1FZsRYetvo3W9vj1HHz2bRtxPEx8tzqRIbTGjtuxqGkTMgiKgFvVXERuJesHWQuvzMvsYXdTZAHZorf1ErVAF7/UEBBE8LJgEkAyIDCphD1TFxyP738fQK5GE7s2Wy67RPDwr7aQcTY4XNyDjwDgJ8HxAhAqW40D2BuJ67+GbClOj20P/GcQrrXI20eyzwCkW6vveSWgsxAS8DLQQKTIh+06T+Fvr84go2I+GWyd//f7r/Ck/+lPRYlzPlY+EKnTBFqtPiJkiKwA4CXRAQIQKFE/IzBOBajKY0fFsqq8Y2sPI1tVu/N4iHCMHbBRbQwUQLGwEZAxcCCgcQydAJbl4+8bUKcGgHRqzQzHdgMw4CsjkQIQKdGx7Sx9ZuyPPvm91Gbj5ncnBhi0QRiGsbfCoW9DNtWU8LJgEkAyIDCnrGXlAtUGvYuCwKMNNGvEsvoxnyRQqoZX7BIur0rVQlDgI3dBAhAr0hkf0ivRc5QAhlXmInw+4oNm90HlgeT66wTzFKNjD2AAFwZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXEIAAAAAAAAAAABcgABcwgAAAAAAAAAAAF1AAF4AAABcAEBAXEBAQFyCAAAAAAAAAAAAXMhAhgzizuEKTT5DeUg7VC07tgVhDOBWV3C6KxMXBh4ZEG2InQCGDOLO4QpNPkN5SDtULTu2BWEM4FZXcLorExcGHhkQbYYAAAAAPkDAIAAAACAewAAgAAAAADIAQAAIXUYM4s7hCk0+Q3lIO1QtO7YFYQzgVldwuisTFwYeGRBthkAAAAAAPkDAIAAAACAewAAgAAAAADIAQAAAXb9kgEAAQACiqxMX49yrImzixn1N4TBnpvqwDyHWifbAp3jeuN6QjGIiToxD0BhNjI3MDhjYWViYmFjODgwYjViODliOTNkYTUzODEwMTY0NDAyMTA0ZTY0OGI2MjI2YTFiNzgwMjE4NTFmNWQ5picIyuu6yIC1uJuT2lOBAWRAIQTmSLYiaht4AhhR9dnKWZOSAAQBAAYF/rgCvf0LrQGrAWUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANCAUAnsAqf2GRlsCBDJ3beLR/oEG6tnx2wzq4xPZzwpCKbxpwTMv9MZQx0Dz7+nIYBmde0G0UxsdYdrw13z9c3JpoUDgIAABAhAgGVxdugZSHQRciMSVIxl3IeC9v6Dom1xEmfbEI3YymWESECKLbCruYEsA8yCWZe87pnvt5NiyupamSQbDyOrOVY3UQBd/2SAQABAAKKrExfj3KsibOLGfU3hMGem+rAPIdaJ9sCneN643pCMYiJOjEPQGE2MjcwOGNhZWJiYWM4ODBiNWI4OWI5M2RhNTM4MTAxNjQ0MDIxMDRlNjQ4YjYyMjZhMWI3ODAyMTg1MWY1ZDmmJwjK67rIgLW4m5PaU4EBZEAhBOZItiJqG3gCGFH12cpZk5IABAEABgX+uAK9/QutAasBZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0IBQCewCp/YZGWwIEMndt4tH+gQbq2fHbDOrjE9nPCkIpvGnBMy/0xlDHQPPv6chgGZ17QbRTGx1h2vDXfP1zcmmhQOAgAAECECAZXF26BlIdBFyIxJUjGXch4L2/oOibXESZ9sQjdjKZYRIQIotsKu5gSwDzIJZl7zume+3k2LK6lqZJBsPI6s5VjdRAF4FQDAEm5vdCBhIHZhbGlkIHNjcmlwdAF5AQEBehNodHRwczovL2V4YW1wbGUuY29tAXv92wZUQVBQAAQAAAAAAiQDq6ohkdlFwEdnr4R6/Q7bXYhXt5mssY5K/6vjA3/+f0TJq0AEUAEAAACQ8KnxEHAvgIIZ6+oRcwVgQqcUutUbkWy2gAAAAAAAAFJ1KJVY9RyZZmmUBK4ilHMMPJ+b2lNSPOUOm5XlWNov2yYbTUyGBBsasb+TBp8BAAAAAZZgjMuvoWq62pAngNpNw12v168F+g2gjPgzV1+M+eg2AAAAAEpJMEYCIQDaskiJITyvQ65q3EHPHJOWwIJAwZn1IlrPRUFjMP19vQIhAP43kA4GRL9XRJOgf8XtugbbwHwxG5R1IMLVFLxXJdy0Af////8BAPIFKgEAAAAZdqkU8V0ZIfUuQAexRt+mDzae0vw5POKIrAAAAAAIggSj86xgXV5HJ/Tqcuk0al1YbwIxRg/VKtmJW8gkDYcd71ItsznBhsEUmEOkhImQ5t25pgZfS8FCKvU/S8hvGwhKiRif8DFs3BBRHacdp1flU8ranztbFDTzkjZzrbV9g8qsOSw4rxVtb8MLVfrUES3yuVUx5oEU6a0QAR5y97fP2w4K/QGWAAEAAooDq6ohkdlFwEdnr4R6/Q7bXYhXt5mssY5K/6vjA3/+f0TJq0BANjFkMmY2NDk3YTMyMzVjMzdmNDE5Mjc3OWVjMWQ5NmIzYjFjNTQyNGZjZTBiNzI3YjAzMDcyZTY0MTVhNzYxZmHS9kl6MjXDf0GSd57B2Ws7HFQk/OC3J7AwcuZBWnYfc25BzAAEAQAGAQEHA/0FOQkBBgutAasBZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0IBQDPu7SKVyIzCQPZPRz2UW9KGlCTZuuApEuT7cwrueTTjLwk0FZbggzAQBu1rUGG3MBUMxOwtzwvfHA7AwRg5gEAOAgAAECECIm1grVEr1K9gc7c/Aqvo+qH21lae7cF/hE+/ucDLCVYRIQLivUVmxFh62+jdb2+PUcfPZtG3E8THy3OpEhtMaO27GgylAAQAAAAAAiEC2PXsrwTlgTQYGkkKlPcJSpQdFn7znv48tQ8Vf5JbEa4DegFJAAEAAiCpDP/pFktLNkoYr3MyGrguFuyQwKImt+ZoZbAidsQF/gQiAAD//////////////////////////////////////////wInAAEAAiIAAP//////////////////////////////////////////BQQAwAEBDf0BTgOlAAQAAAACAiECpyTt9FMdVVLm/EKmVgRZkQlnXCzFDXWApwyx++W5etcDegFJAAEAAiCpDP/pFktLNkoYr3MyGrguFuyQwKImt+ZoZbAidsQF/gQiAAD//////////////////////////////////////////wInAAEAAiIAAP//////////////////////////////////////////BQQAwAEBdwAEAAAAAwIhAp0rbU3GQbFpAo2l2Us7ysz1DiPHXVSyifcmKSfZmO1KBUwBQQEarCVAik0oIzzTJfrvrenvD652/LHjXQgUAEW7qjgbMO70bkYwNVZgLvE8710v/z3GouzmZX/JHksKW7ot7U7/AwQAwAECBAEBLgAEAAAABAIhAn1jfuDRwthFs6fHORuG5xz1V613LuRODmgbonnrB++RBQMEAQEPnwAEAAAABAIhAtPWeeLyODXV4/1AIJfG91EXL5AD8Zha7Yc2icFN/Io5A3QBSQABAAIgqQz/6RZLSzZKGK9zMhq4LhbskMCiJrfmaGWwInbEBf4EIgAA//////////////////////////////////////////8CJwABAAIiAAD//////////////////////////////////////////xEeAAEAAhlxdW90aCB0aGUgcmF2ZW4gbmV2ZXJtb3JlFQkCA2ZvbwNiYXIWBAAAACoXigOrqiGR2UXAR2evhHr9DttdiFe3mayxjkr/q+MDf/5/RMmrQEA2MWQyZjY0OTdhMzIzNWMzN2Y0MTkyNzc5ZWMxZDk2YjNiMWM1NDI0ZmNlMGI3MjdiMDMwNzJlNjQxNWE3NjFmYdL2SXoyNcN/QZJ3nsHZazscVCT84LcnsDBy5kFadh9zbkHMABlBAuK9RWbEWHrb6N1vb49Rx89m0bcTxMfLc6kSG0xo7bsahpEzIIioBb1VxEbiXrB1kLr8zL7GF3U2QB2aK39RK1QBfAgAAAAAAAAByAF9CAAAAAAAAAFZAX79QQEETwsmASQDIgMKY2YTqcyUQQM6pQq69A1F4k1y6sSiCo48oDDJk3q4QJoOAoveECECY1kqmnMkp/Z9j20ocTtLKyJYSfkC08IzAaHedM6271ZaCzEBLwMtBAoA2uTi5d+M84WeCr3a2mdF+6agTFwKN8fKNQNvEXMs6Aq8J7SIaGEfxzyCDgIiZBAhAhRPd8yt4ipR0bygav+6++HNeg+nwK/6mLfOp1GjBdKXWgsxAS8DLQQKzVlh4ZvgN8aL9wrF5d4dLGgZI0jsChGJ+y42lzzvCf8KFL4jkigB9uruQQ4CH1cQIQKTN25NMqVsOySb6O2iHSFMXd/wy6QUqRTkZ1xXRZXmMTkLEAEOAwwBCpXmn2nC7H9AV7MOAiE6ECECObf3sUFgsBN17i942XtmVkmDPDaP8ZqjGRE2oge815cAAXABAQFxAQABcggAAAAAAAAAAQFzIQIYM4s7hCk0+Q3lIO1QtO7YFYQzgVldwuisTFwYeGRBtiJ0AhgzizuEKTT5DeUg7VC07tgVhDOBWV3C6KxMXBh4ZEG2GAAAAAD5AwCAAAAAgHsAAIAAAAAAyAEAACF1GDOLO4QpNPkN5SDtULTu2BWEM4FZXcLorExcGHhkQbYZAAAAAAD5AwCAAAAAgHsAAIAAAAAAyAEAAAF2/ZIBAAEAAoqsTF+PcqyJs4sZ9TeEwZ6b6sA8h1on2wKd43rjekIxiIk6MQ9AYTYyNzA4Y2FlYmJhYzg4MGI1Yjg5YjkzZGE1MzgxMDE2NDQwMjEwNGU2NDhiNjIyNmExYjc4MDIxODUxZjVkOaYnCMrrusiAtbibk9pTgQFkQCEE5ki2ImobeAIYUfXZylmTkgAEAQAGBf64Ar39C60BqwFlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQgFAJ7AKn9hkZbAgQyd23i0f6BBurZ8dsM6uMT2c8KQim8acEzL/TGUMdA8+/pyGAZnXtBtFMbHWHa8Nd8/XNyaaFA4CAAAQIQIBlcXboGUh0EXIjElSMZdyHgvb+g6JtcRJn2xCN2MplhEhAii2wq7mBLAPMglmXvO6Z77eTYsrqWpkkGw8jqzlWN1EAXhBARl84i0SvFqZWHUzr0EWn6Hcn/hmwNTTAhFY1ikzZy0RGXziLRK8WplYdTOvQRafodyf+GbA1NMCEVjWKTNnLREBeQEBAXwIAAAAAAAAAAABfQgAAAAAAAAAAAF+/SsBBEQLGwEZAxcCCkqHOKot8EcV2HkKJ5qWh5pPNpCsIA4Cf00QIQL/WMioPhUoBPWnIajV+DB+NTaPdshLuzgbw8hwHsDvOTkLEAEOAwwBCuGjQl6tadT5dQEOAlD2ECECVIrtpD77igOydDHjo+4x1Uu70k54ylb8LPB/i1zP4MxaCzEBLwMtBAqLwg7lJnQVOfoyCgPHfsukEP1nGPIKJ+C0MPm8sEmj0wqFQNwiKWkSDOgPDgI1eRAhAkKW5RvWWsG0dTm9dTDxGuFkapxQ3r1Zm7PouSiLc6OQTwsmASQDIgMKLO5eccTlWiDxuQr5fQRilhJGIZKHCjmoZnHMGAFSuVMOAoC6ECEChBeAPBJ4ZecEqYvlIfDW+BteNiLdgAI08LL/cyG/QHUA", "comment": "random packet with no explicit version" } ], diff --git a/taprpc/taprootassets.pb.go b/taprpc/taprootassets.pb.go index 8f9f753d6..ddf998a23 100644 --- a/taprpc/taprootassets.pb.go +++ b/taprpc/taprootassets.pb.go @@ -4172,6 +4172,11 @@ type DecodedProof struct { // GroupKeyReveal is an optional field that includes the information needed // to derive the tweaked group key. GroupKeyReveal *GroupKeyReveal `protobuf:"bytes,13,opt,name=group_key_reveal,json=groupKeyReveal,proto3" json:"group_key_reveal,omitempty"` + // AltLeaves represent data used to construct an Asset commitment, that + // will be inserted in the input anchor Tap commitment. These data-carrying + // leaves are used for a purpose distinct from representing individual + // individual Taproot Assets. + AltLeaves []byte `protobuf:"bytes,14,opt,name=alt_leaves,json=altLeaves,proto3" json:"alt_leaves,omitempty"` } func (x *DecodedProof) Reset() { @@ -4297,6 +4302,13 @@ func (x *DecodedProof) GetGroupKeyReveal() *GroupKeyReveal { return nil } +func (x *DecodedProof) GetAltLeaves() []byte { + if x != nil { + return x.AltLeaves + } + return nil +} + type VerifyProofResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6551,7 +6563,7 @@ var file_taprootassets_proto_rawDesc = []byte{ 0x77, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x22, - 0xd7, 0x04, 0x0a, 0x0c, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0xf6, 0x04, 0x0a, 0x0c, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x61, 0x74, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x41, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, 0x12, 0x28, 0x0a, 0x10, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, @@ -6588,396 +6600,398 @@ var file_taprootassets_proto_rawDesc = []byte{ 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, - 0x4b, 0x65, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x22, 0x66, 0x0a, 0x13, 0x56, 0x65, 0x72, - 0x69, 0x66, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0d, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, - 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x52, 0x0c, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x22, 0xb1, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x61, 0x77, 0x5f, - 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x61, 0x77, - 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x61, - 0x74, 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x70, - 0x72, 0x6f, 0x6f, 0x66, 0x41, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x77, - 0x69, 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, - 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x77, 0x69, 0x74, 0x68, 0x50, 0x72, - 0x65, 0x76, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x77, - 0x69, 0x74, 0x68, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x52, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x22, 0x50, 0x0a, 0x13, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0d, - 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x0c, 0x64, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x7c, 0x0a, 0x12, 0x45, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x61, 0x70, 0x72, - 0x70, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x08, 0x6f, 0x75, 0x74, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0xd0, 0x02, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x72, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, - 0x12, 0x20, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x52, 0x04, 0x61, 0x64, - 0x64, 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, - 0x20, 0x0a, 0x0c, 0x75, 0x74, 0x78, 0x6f, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x73, 0x61, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x75, 0x74, 0x78, 0x6f, 0x41, 0x6d, 0x74, 0x53, 0x61, - 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x70, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x73, 0x69, 0x62, - 0x6c, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x74, 0x61, 0x70, 0x72, - 0x6f, 0x6f, 0x74, 0x53, 0x69, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x68, - 0x61, 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, - 0x68, 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x74, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x72, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1f, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, - 0x12, 0x3c, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x0c, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x41, - 0x0a, 0x14, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, - 0x41, 0x64, 0x64, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x22, 0x4a, 0x0a, 0x10, 0x53, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x70, 0x5f, 0x61, 0x64, 0x64, - 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x70, 0x41, 0x64, 0x64, - 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66, 0x65, 0x65, 0x52, 0x61, 0x74, 0x65, 0x22, 0x85, 0x01, - 0x0a, 0x0e, 0x50, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, - 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x09, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, - 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, - 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x46, 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x08, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, - 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x52, 0x08, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x22, 0x10, 0x0a, - 0x0e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x9b, 0x02, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, - 0x0b, 0x6c, 0x6e, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, - 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x6e, 0x64, 0x5f, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x6e, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, - 0x74, 0x79, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, - 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, - 0x64, 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x79, 0x6e, - 0x63, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0b, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x6f, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x22, 0xa6, 0x01, - 0x0a, 0x15, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x68, 0x61, 0x73, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x48, - 0x61, 0x73, 0x68, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x5f, - 0x73, 0x74, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x73, 0x73, - 0x65, 0x74, 0x49, 0x64, 0x53, 0x74, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x5f, - 0x68, 0x61, 0x73, 0x68, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x61, 0x48, 0x61, 0x73, 0x68, 0x53, 0x74, 0x72, 0x42, 0x07, 0x0a, - 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x22, 0xc3, 0x01, 0x0a, 0x10, 0x42, 0x75, 0x72, 0x6e, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x08, 0x61, - 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, - 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x73, 0x73, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x53, 0x74, 0x72, 0x12, 0x24, 0x0a, 0x0e, - 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x62, 0x75, 0x72, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x42, 0x75, - 0x72, 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x78, 0x74, 0x12, - 0x12, 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, - 0x6f, 0x74, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x22, 0x84, 0x01, 0x0a, - 0x11, 0x42, 0x75, 0x72, 0x6e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x62, 0x75, 0x72, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x61, 0x70, 0x72, - 0x70, 0x63, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, - 0x52, 0x0c, 0x62, 0x75, 0x72, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x33, - 0x0a, 0x0a, 0x62, 0x75, 0x72, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, + 0x4b, 0x65, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x6c, 0x74, + 0x5f, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x61, + 0x6c, 0x74, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x73, 0x22, 0x66, 0x0a, 0x13, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x12, 0x39, 0x0a, 0x0d, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, + 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, + 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x52, 0x0c, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x22, 0xb1, 0x01, 0x0a, 0x12, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x61, 0x77, 0x5f, 0x70, + 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x72, 0x61, 0x77, 0x50, + 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x24, 0x0a, 0x0e, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x5f, 0x61, 0x74, + 0x5f, 0x64, 0x65, 0x70, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x70, 0x72, + 0x6f, 0x6f, 0x66, 0x41, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, 0x12, 0x2e, 0x0a, 0x13, 0x77, 0x69, + 0x74, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x5f, 0x77, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x65, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x77, 0x69, 0x74, 0x68, 0x50, 0x72, 0x65, + 0x76, 0x57, 0x69, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x10, 0x77, 0x69, + 0x74, 0x68, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, + 0x76, 0x65, 0x61, 0x6c, 0x22, 0x50, 0x0a, 0x13, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x64, + 0x65, 0x63, 0x6f, 0x64, 0x65, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x63, 0x6f, - 0x64, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x09, 0x62, 0x75, 0x72, 0x6e, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x22, 0x7a, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, - 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x77, 0x65, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x74, - 0x77, 0x65, 0x61, 0x6b, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x1f, - 0x0a, 0x0b, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x5f, 0x74, 0x78, 0x69, 0x64, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x54, 0x78, 0x69, 0x64, 0x22, - 0x9f, 0x01, 0x0a, 0x09, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, - 0x74, 0x77, 0x65, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x74, 0x77, 0x65, 0x61, 0x6b, 0x65, 0x64, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x5f, 0x74, 0x78, 0x69, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x54, 0x78, 0x69, - 0x64, 0x22, 0x3c, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x62, 0x75, 0x72, 0x6e, 0x73, 0x18, + 0x64, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x0c, 0x64, 0x65, 0x63, 0x6f, 0x64, 0x65, + 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x7c, 0x0a, 0x12, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, + 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, + 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x22, 0xd0, 0x02, 0x0a, 0x09, 0x41, 0x64, 0x64, 0x72, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x1a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x5f, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x63, 0x72, 0x65, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x54, 0x69, 0x6d, 0x65, 0x55, 0x6e, 0x69, 0x78, 0x53, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, + 0x20, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, + 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x52, 0x04, 0x61, 0x64, 0x64, + 0x72, 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x17, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x20, + 0x0a, 0x0c, 0x75, 0x74, 0x78, 0x6f, 0x5f, 0x61, 0x6d, 0x74, 0x5f, 0x73, 0x61, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x75, 0x74, 0x78, 0x6f, 0x41, 0x6d, 0x74, 0x53, 0x61, 0x74, + 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x61, 0x70, 0x72, 0x6f, 0x6f, 0x74, 0x5f, 0x73, 0x69, 0x62, 0x6c, + 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x74, 0x61, 0x70, 0x72, 0x6f, + 0x6f, 0x74, 0x53, 0x69, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x68, 0x61, + 0x73, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x68, + 0x61, 0x73, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x74, 0x0a, 0x13, 0x41, 0x64, 0x64, 0x72, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, + 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x12, + 0x3c, 0x0a, 0x0d, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, + 0x0c, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x41, 0x0a, + 0x14, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x52, 0x05, 0x62, 0x75, 0x72, 0x6e, 0x73, 0x22, - 0x41, 0x0a, 0x08, 0x4f, 0x75, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x78, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6e, 0x64, - 0x65, 0x78, 0x22, 0x69, 0x0a, 0x1d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, - 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x41, 0x64, 0x64, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xe8, 0x01, - 0x0a, 0x0c, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, 0x07, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x52, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x12, 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x17, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x48, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, - 0x5f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x0f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4b, - 0x65, 0x79, 0x22, 0x9d, 0x03, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, - 0x0b, 0x70, 0x61, 0x72, 0x63, 0x65, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x63, - 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x63, 0x65, 0x6c, 0x54, 0x79, - 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x27, - 0x0a, 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, - 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x61, 0x73, 0x73, 0x69, - 0x76, 0x65, 0x5f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, - 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x15, 0x70, 0x61, 0x73, 0x73, 0x69, 0x76, - 0x65, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, - 0x48, 0x0a, 0x12, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x61, - 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x54, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x08, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x61, + 0x64, 0x64, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x22, 0x4a, 0x0a, 0x10, 0x53, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x70, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x74, 0x61, 0x70, 0x41, 0x64, 0x64, 0x72, + 0x73, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x07, 0x66, 0x65, 0x65, 0x52, 0x61, 0x74, 0x65, 0x22, 0x85, 0x01, 0x0a, + 0x0e, 0x50, 0x72, 0x65, 0x76, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, + 0x21, 0x0a, 0x0c, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x09, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x46, 0x0a, 0x11, 0x53, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x08, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, - 0x65, 0x72, 0x52, 0x08, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, - 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, - 0x6f, 0x72, 0x22, 0x97, 0x02, 0x0a, 0x11, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6e, 0x63, 0x68, - 0x6f, 0x72, 0x5f, 0x70, 0x73, 0x62, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x61, - 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x50, 0x73, 0x62, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x75, - 0x74, 0x70, 0x75, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x5f, 0x66, 0x65, 0x65, 0x73, 0x5f, 0x73, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x65, 0x65, 0x73, 0x53, 0x61, 0x74, - 0x73, 0x12, 0x32, 0x0a, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x65, 0x65, 0x5f, - 0x72, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x61, 0x74, 0x5f, 0x6b, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x65, 0x65, 0x52, 0x61, 0x74, 0x65, - 0x53, 0x61, 0x74, 0x4b, 0x77, 0x12, 0x3a, 0x0a, 0x10, 0x6c, 0x6e, 0x64, 0x5f, 0x6c, 0x6f, 0x63, - 0x6b, 0x65, 0x64, 0x5f, 0x75, 0x74, 0x78, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x52, 0x0e, 0x6c, 0x6e, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x74, 0x78, 0x6f, - 0x73, 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x54, 0x78, 0x2a, 0x28, 0x0a, 0x09, - 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52, - 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, - 0x49, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x2a, 0x39, 0x0a, 0x0d, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x45, 0x54, 0x41, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x50, 0x41, 0x51, 0x55, 0x45, 0x10, 0x00, 0x12, 0x12, 0x0a, - 0x0e, 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, - 0x01, 0x2a, 0x3a, 0x0a, 0x0c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x53, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, - 0x4f, 0x4e, 0x5f, 0x56, 0x30, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x53, 0x53, 0x45, 0x54, - 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x31, 0x10, 0x01, 0x2a, 0x52, 0x0a, - 0x0a, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x4f, - 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4d, 0x50, 0x4c, - 0x45, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x5f, 0x53, 0x50, 0x4c, 0x49, 0x54, 0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x10, 0x01, 0x22, - 0x04, 0x08, 0x02, 0x10, 0x02, 0x22, 0x04, 0x08, 0x03, 0x10, 0x03, 0x22, 0x04, 0x08, 0x04, 0x10, - 0x04, 0x2a, 0x86, 0x01, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x44, 0x65, 0x6c, 0x69, 0x76, - 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x24, 0x50, 0x52, 0x4f, - 0x4f, 0x46, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x42, 0x4c, - 0x45, 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, 0x44, 0x45, 0x4c, - 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, - 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x50, 0x52, 0x4f, 0x4f, 0x46, - 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x2a, 0x55, 0x0a, 0x0b, 0x41, 0x64, - 0x64, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x44, 0x44, - 0x52, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x44, 0x44, 0x52, 0x5f, - 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x30, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, - 0x41, 0x44, 0x44, 0x52, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x31, 0x10, - 0x02, 0x2a, 0xd0, 0x01, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x45, 0x56, - 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x45, 0x56, 0x45, - 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, - 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x54, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x2b, 0x0a, 0x27, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x10, 0x02, 0x12, 0x24, 0x0a, - 0x20, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, - 0x55, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, - 0x44, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, - 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, - 0x45, 0x44, 0x10, 0x04, 0x2a, 0x9b, 0x02, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, - 0x5f, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x53, - 0x45, 0x4c, 0x45, 0x43, 0x54, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x4e, 0x44, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x53, 0x49, - 0x47, 0x4e, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x45, 0x5f, 0x41, 0x4e, 0x43, 0x48, 0x4f, 0x52, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x02, - 0x12, 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, - 0x4f, 0x47, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x12, - 0x18, 0x0a, 0x14, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x42, 0x52, - 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x45, 0x4e, - 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x5f, 0x43, 0x4f, 0x4e, - 0x46, 0x49, 0x52, 0x4d, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x53, - 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, - 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x53, 0x10, 0x06, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x45, 0x4e, 0x44, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x5f, - 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x53, 0x10, 0x07, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x4e, 0x44, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, - 0x10, 0x08, 0x2a, 0x78, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x63, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x43, 0x45, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x41, 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x41, 0x52, - 0x43, 0x45, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x5f, 0x53, 0x49, 0x47, - 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x43, 0x45, 0x4c, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x1c, - 0x0a, 0x18, 0x50, 0x41, 0x52, 0x43, 0x45, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, - 0x45, 0x5f, 0x41, 0x4e, 0x43, 0x48, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x03, 0x32, 0x9a, 0x0b, 0x0a, - 0x0d, 0x54, 0x61, 0x70, 0x72, 0x6f, 0x6f, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x41, - 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x74, - 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, - 0x4c, 0x69, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x40, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x12, 0x18, - 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x74, 0x78, 0x6f, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, - 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x73, 0x12, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x74, - 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, - 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, - 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, - 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x37, 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x70, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x12, - 0x13, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, - 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x44, 0x65, - 0x62, 0x75, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, - 0x63, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x62, - 0x75, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x41, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x73, 0x12, 0x18, 0x2e, - 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x4e, 0x65, 0x77, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, 0x2e, - 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x65, 0x77, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, - 0x64, 0x64, 0x72, 0x12, 0x35, 0x0a, 0x0a, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, - 0x72, 0x12, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x64, - 0x65, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x74, - 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x12, 0x49, 0x0a, 0x0c, 0x41, 0x64, - 0x64, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x74, 0x61, 0x70, - 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, - 0x2e, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x11, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x46, 0x69, 0x6c, 0x65, 0x1a, 0x1b, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, - 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x12, 0x1a, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x63, - 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1b, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x50, - 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, - 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x1a, 0x2e, 0x74, 0x61, - 0x70, 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, - 0x2e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x09, 0x53, 0x65, - 0x6e, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x18, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, - 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x41, - 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x09, - 0x42, 0x75, 0x72, 0x6e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x18, 0x2e, 0x74, 0x61, 0x70, 0x72, - 0x70, 0x63, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x72, - 0x6e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, - 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x73, 0x12, 0x18, 0x2e, 0x74, 0x61, - 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x73, 0x52, 0x65, + 0x65, 0x72, 0x52, 0x08, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x22, 0x10, 0x0a, 0x0e, + 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9b, + 0x02, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, + 0x6c, 0x6e, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x6c, 0x6e, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x6e, 0x64, 0x5f, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x70, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6c, 0x6e, 0x64, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x50, 0x75, 0x62, 0x6b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x6f, 0x64, + 0x65, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x61, 0x73, 0x68, 0x12, 0x22, 0x0a, 0x0d, 0x73, 0x79, 0x6e, 0x63, + 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0b, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x6f, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x22, 0xa6, 0x01, 0x0a, + 0x15, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x68, 0x61, 0x73, 0x68, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x48, 0x61, + 0x73, 0x68, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x5f, 0x73, + 0x74, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x61, 0x73, 0x73, 0x65, + 0x74, 0x49, 0x64, 0x53, 0x74, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x65, 0x74, 0x61, 0x5f, 0x68, + 0x61, 0x73, 0x68, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x0b, 0x6d, 0x65, 0x74, 0x61, 0x48, 0x61, 0x73, 0x68, 0x53, 0x74, 0x72, 0x42, 0x07, 0x0a, 0x05, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x22, 0xc3, 0x01, 0x0a, 0x10, 0x42, 0x75, 0x72, 0x6e, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x08, 0x61, 0x73, + 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x07, + 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x5f, 0x69, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x0a, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x53, 0x74, 0x72, 0x12, 0x24, 0x0a, 0x0e, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x62, 0x75, 0x72, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0c, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x42, 0x75, 0x72, + 0x6e, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x65, 0x78, 0x74, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, + 0x74, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x61, 0x73, 0x73, 0x65, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x11, + 0x42, 0x75, 0x72, 0x6e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3a, 0x0a, 0x0d, 0x62, 0x75, 0x72, 0x6e, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, + 0x63, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, + 0x0c, 0x62, 0x75, 0x72, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x33, 0x0a, + 0x0a, 0x62, 0x75, 0x72, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x64, + 0x65, 0x64, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x09, 0x62, 0x75, 0x72, 0x6e, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x22, 0x7a, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, + 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, 0x77, 0x65, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x74, 0x77, + 0x65, 0x61, 0x6b, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, + 0x0b, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x5f, 0x74, 0x78, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0a, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x54, 0x78, 0x69, 0x64, 0x22, 0x9f, + 0x01, 0x0a, 0x09, 0x41, 0x73, 0x73, 0x65, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x12, 0x12, 0x0a, 0x04, + 0x6e, 0x6f, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x6f, 0x74, 0x65, + 0x12, 0x19, 0x0a, 0x08, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x61, 0x73, 0x73, 0x65, 0x74, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x74, + 0x77, 0x65, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x74, 0x77, 0x65, 0x61, 0x6b, 0x65, 0x64, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x1f, 0x0a, 0x0b, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x5f, 0x74, 0x78, 0x69, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x54, 0x78, 0x69, 0x64, + 0x22, 0x3c, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x62, 0x75, 0x72, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x52, 0x05, 0x62, 0x75, 0x72, 0x6e, 0x73, 0x22, 0x41, + 0x0a, 0x08, 0x4f, 0x75, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x78, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74, 0x78, 0x69, 0x64, 0x12, 0x21, + 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x22, 0x69, 0x0a, 0x1d, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x41, + 0x64, 0x64, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0e, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xe8, 0x01, 0x0a, + 0x0c, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, + 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x74, + 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, + 0x2f, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x17, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x12, 0x2f, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x48, 0x0a, 0x1a, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x5f, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x0f, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x53, 0x63, 0x72, 0x69, 0x70, 0x74, 0x4b, 0x65, + 0x79, 0x22, 0x9d, 0x03, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1d, 0x0a, + 0x0a, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x0b, + 0x70, 0x61, 0x72, 0x63, 0x65, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x12, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x63, 0x65, + 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x63, 0x65, 0x6c, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x2a, 0x0a, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x52, 0x09, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x27, 0x0a, + 0x0f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0e, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, + 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x36, 0x0a, 0x17, 0x70, 0x61, 0x73, 0x73, 0x69, 0x76, + 0x65, 0x5f, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x15, 0x70, 0x61, 0x73, 0x73, 0x69, 0x76, 0x65, + 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x48, + 0x0a, 0x12, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x74, 0x61, 0x70, + 0x72, 0x70, 0x63, 0x2e, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x61, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x08, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x66, 0x65, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x74, 0x61, 0x70, + 0x72, 0x70, 0x63, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, + 0x72, 0x52, 0x08, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x22, 0x97, 0x02, 0x0a, 0x11, 0x41, 0x6e, 0x63, 0x68, 0x6f, 0x72, 0x54, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6e, 0x63, 0x68, 0x6f, + 0x72, 0x5f, 0x70, 0x73, 0x62, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x61, 0x6e, + 0x63, 0x68, 0x6f, 0x72, 0x50, 0x73, 0x62, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x75, 0x74, + 0x70, 0x75, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x26, 0x0a, 0x0f, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x5f, 0x66, 0x65, 0x65, 0x73, 0x5f, 0x73, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x46, 0x65, 0x65, 0x73, 0x53, 0x61, 0x74, 0x73, + 0x12, 0x32, 0x0a, 0x16, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x72, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x61, 0x74, 0x5f, 0x6b, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, + 0x52, 0x12, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x46, 0x65, 0x65, 0x52, 0x61, 0x74, 0x65, 0x53, + 0x61, 0x74, 0x4b, 0x77, 0x12, 0x3a, 0x0a, 0x10, 0x6c, 0x6e, 0x64, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, + 0x65, 0x64, 0x5f, 0x75, 0x74, 0x78, 0x6f, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4f, 0x75, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x52, 0x0e, 0x6c, 0x6e, 0x64, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x55, 0x74, 0x78, 0x6f, 0x73, + 0x12, 0x19, 0x0a, 0x08, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x5f, 0x74, 0x78, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x07, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x54, 0x78, 0x2a, 0x28, 0x0a, 0x09, 0x41, + 0x73, 0x73, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x4e, 0x4f, 0x52, 0x4d, + 0x41, 0x4c, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x4f, 0x4c, 0x4c, 0x45, 0x43, 0x54, 0x49, + 0x42, 0x4c, 0x45, 0x10, 0x01, 0x2a, 0x39, 0x0a, 0x0d, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x50, 0x41, 0x51, 0x55, 0x45, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, + 0x4d, 0x45, 0x54, 0x41, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4a, 0x53, 0x4f, 0x4e, 0x10, 0x01, + 0x2a, 0x3a, 0x0a, 0x0c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x12, 0x14, 0x0a, 0x10, 0x41, 0x53, 0x53, 0x45, 0x54, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, + 0x4e, 0x5f, 0x56, 0x30, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x41, 0x53, 0x53, 0x45, 0x54, 0x5f, + 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x31, 0x10, 0x01, 0x2a, 0x52, 0x0a, 0x0a, + 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x55, + 0x54, 0x50, 0x55, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, 0x4d, 0x50, 0x4c, 0x45, + 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x4f, 0x55, 0x54, 0x50, 0x55, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x5f, 0x53, 0x50, 0x4c, 0x49, 0x54, 0x5f, 0x52, 0x4f, 0x4f, 0x54, 0x10, 0x01, 0x22, 0x04, + 0x08, 0x02, 0x10, 0x02, 0x22, 0x04, 0x08, 0x03, 0x10, 0x03, 0x22, 0x04, 0x08, 0x04, 0x10, 0x04, + 0x2a, 0x86, 0x01, 0x0a, 0x13, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x44, 0x65, 0x6c, 0x69, 0x76, 0x65, + 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x24, 0x50, 0x52, 0x4f, 0x4f, + 0x46, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x42, 0x4c, 0x45, + 0x10, 0x00, 0x12, 0x22, 0x0a, 0x1e, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, 0x44, 0x45, 0x4c, 0x49, + 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, + 0x4c, 0x45, 0x54, 0x45, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, + 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x2a, 0x55, 0x0a, 0x0b, 0x41, 0x64, 0x64, + 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x18, 0x41, 0x44, 0x44, 0x52, + 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x56, + 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x30, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x41, + 0x44, 0x44, 0x52, 0x5f, 0x56, 0x45, 0x52, 0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x31, 0x10, 0x02, + 0x2a, 0xd0, 0x01, 0x0a, 0x0f, 0x41, 0x64, 0x64, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x19, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x45, 0x56, 0x45, + 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, + 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x44, 0x45, 0x54, 0x45, 0x43, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x2b, 0x0a, 0x27, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, + 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x52, 0x4d, 0x45, 0x44, 0x10, 0x02, 0x12, 0x24, 0x0a, 0x20, + 0x41, 0x44, 0x44, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x4f, 0x46, 0x5f, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, + 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x41, 0x44, 0x44, 0x52, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, + 0x44, 0x10, 0x04, 0x2a, 0x9b, 0x02, 0x0a, 0x09, 0x53, 0x65, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x23, 0x0a, 0x1f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, + 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x49, 0x4e, 0x50, 0x55, 0x54, 0x5f, 0x53, 0x45, + 0x4c, 0x45, 0x43, 0x54, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x45, 0x5f, 0x56, 0x49, 0x52, 0x54, 0x55, 0x41, 0x4c, 0x5f, 0x53, 0x49, 0x47, + 0x4e, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x45, 0x5f, 0x41, 0x4e, 0x43, 0x48, 0x4f, 0x52, 0x5f, 0x53, 0x49, 0x47, 0x4e, 0x10, 0x02, 0x12, + 0x1d, 0x0a, 0x19, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x4c, 0x4f, + 0x47, 0x5f, 0x43, 0x4f, 0x4d, 0x4d, 0x49, 0x54, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x12, 0x18, + 0x0a, 0x14, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x42, 0x52, 0x4f, + 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x53, 0x45, 0x4e, 0x44, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x57, 0x41, 0x49, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x46, + 0x49, 0x52, 0x4d, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x05, 0x12, 0x1b, 0x0a, 0x17, 0x53, 0x45, + 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x45, 0x5f, 0x50, + 0x52, 0x4f, 0x4f, 0x46, 0x53, 0x10, 0x06, 0x12, 0x1e, 0x0a, 0x1a, 0x53, 0x45, 0x4e, 0x44, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x54, 0x52, 0x41, 0x4e, 0x53, 0x46, 0x45, 0x52, 0x5f, 0x50, + 0x52, 0x4f, 0x4f, 0x46, 0x53, 0x10, 0x07, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x4e, 0x44, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, + 0x08, 0x2a, 0x78, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x63, 0x65, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, + 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x43, 0x45, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x41, + 0x44, 0x44, 0x52, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x41, 0x52, 0x43, + 0x45, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x45, 0x5f, 0x53, 0x49, 0x47, 0x4e, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x50, 0x41, 0x52, 0x43, 0x45, 0x4c, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x1c, 0x0a, + 0x18, 0x50, 0x41, 0x52, 0x43, 0x45, 0x4c, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x50, 0x52, 0x45, + 0x5f, 0x41, 0x4e, 0x43, 0x48, 0x4f, 0x52, 0x45, 0x44, 0x10, 0x03, 0x32, 0x9a, 0x0b, 0x0a, 0x0d, + 0x54, 0x61, 0x70, 0x72, 0x6f, 0x6f, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x41, 0x0a, + 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x18, 0x2e, 0x74, 0x61, + 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x74, 0x61, - 0x70, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0e, - 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1d, - 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, - 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x12, 0x57, 0x0a, 0x16, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x70, - 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x63, - 0x65, 0x69, 0x76, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x14, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x4e, 0x0a, 0x13, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, - 0x12, 0x22, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, - 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, - 0x67, 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x74, 0x61, 0x70, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x61, 0x73, - 0x73, 0x65, 0x74, 0x73, 0x2f, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x69, 0x73, 0x74, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x40, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x12, 0x18, 0x2e, + 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, + 0x12, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x74, 0x61, + 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x65, 0x72, 0x73, 0x12, 0x1c, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1d, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x37, 0x0a, 0x0a, 0x53, 0x74, 0x6f, 0x70, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x12, 0x13, + 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x6f, + 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x44, 0x65, 0x62, + 0x75, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, + 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x62, 0x75, + 0x67, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, + 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x73, 0x12, 0x18, 0x2e, 0x74, + 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2f, 0x0a, 0x07, 0x4e, 0x65, 0x77, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, 0x2e, 0x74, + 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4e, 0x65, 0x77, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, + 0x64, 0x72, 0x12, 0x35, 0x0a, 0x0a, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x41, 0x64, 0x64, 0x72, + 0x12, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, + 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x74, 0x61, + 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x12, 0x49, 0x0a, 0x0c, 0x41, 0x64, 0x64, + 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x12, 0x1b, 0x2e, 0x74, 0x61, 0x70, 0x72, + 0x70, 0x63, 0x2e, 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, + 0x41, 0x64, 0x64, 0x72, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x12, 0x11, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x46, 0x69, 0x6c, 0x65, 0x1a, 0x1b, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, + 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x12, 0x1a, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x63, 0x6f, + 0x64, 0x65, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, + 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x44, 0x65, 0x63, 0x6f, 0x64, 0x65, 0x50, 0x72, + 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x0b, 0x45, + 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x1a, 0x2e, 0x74, 0x61, 0x70, + 0x72, 0x70, 0x63, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, + 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x09, 0x53, 0x65, 0x6e, + 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x18, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x41, 0x73, + 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x09, 0x42, + 0x75, 0x72, 0x6e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x12, 0x18, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, + 0x63, 0x2e, 0x42, 0x75, 0x72, 0x6e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x42, 0x75, 0x72, 0x6e, + 0x41, 0x73, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, + 0x09, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x73, 0x12, 0x18, 0x2e, 0x74, 0x61, 0x70, + 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x42, 0x75, 0x72, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3a, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x74, 0x61, 0x70, + 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x47, 0x65, 0x74, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x46, + 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x2e, + 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x46, 0x65, 0x74, 0x63, 0x68, 0x41, 0x73, 0x73, 0x65, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x74, + 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, + 0x57, 0x0a, 0x16, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x74, 0x61, 0x70, 0x72, + 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x14, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x4e, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x22, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x53, 0x65, 0x6e, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x65, 0x6e, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x69, 0x6e, 0x67, + 0x6c, 0x61, 0x62, 0x73, 0x2f, 0x74, 0x61, 0x70, 0x72, 0x6f, 0x6f, 0x74, 0x2d, 0x61, 0x73, 0x73, + 0x65, 0x74, 0x73, 0x2f, 0x74, 0x61, 0x70, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/taprpc/taprootassets.proto b/taprpc/taprootassets.proto index 84d54e767..5fec3f43f 100644 --- a/taprpc/taprootassets.proto +++ b/taprpc/taprootassets.proto @@ -1044,6 +1044,12 @@ message DecodedProof { // GroupKeyReveal is an optional field that includes the information needed // to derive the tweaked group key. GroupKeyReveal group_key_reveal = 13; + + // AltLeaves represent data used to construct an Asset commitment, that + // will be inserted in the input anchor Tap commitment. These data-carrying + // leaves are used for a purpose distinct from representing individual + // individual Taproot Assets. + bytes alt_leaves = 14; } message VerifyProofResponse { diff --git a/taprpc/taprootassets.swagger.json b/taprpc/taprootassets.swagger.json index 91c664f32..4272a350c 100644 --- a/taprpc/taprootassets.swagger.json +++ b/taprpc/taprootassets.swagger.json @@ -1641,6 +1641,11 @@ "group_key_reveal": { "$ref": "#/definitions/taprpcGroupKeyReveal", "description": "GroupKeyReveal is an optional field that includes the information needed\nto derive the tweaked group key." + }, + "alt_leaves": { + "type": "string", + "format": "byte", + "description": "AltLeaves represent data used to construct an Asset commitment, that\nwill be inserted in the input anchor Tap commitment. These data-carrying\nleaves are used for a purpose distinct from representing individual\nindividual Taproot Assets." } } }, diff --git a/tapsend/send.go b/tapsend/send.go index f5e3ea2e9..5b47b670a 100644 --- a/tapsend/send.go +++ b/tapsend/send.go @@ -1044,6 +1044,9 @@ func CreateOutputCommitments( if err := AssertOutputAnchorsEqual(packets); err != nil { return nil, err } + if err := AssertOutputAltLeavesValid(packets); err != nil { + return nil, err + } // We need to make sure this transaction doesn't lead to collisions in // any of the trees (e.g. two asset outputs with the same script key in @@ -1125,6 +1128,13 @@ func commitPacket(vPkt *tappsbt.VPacket, err) } + // If the vOutput contains any AltLeaves, merge them into the + // tap commitment. + err = sendTapCommitment.MergeAltLeaves(vOut.AltLeaves) + if err != nil { + return fmt.Errorf("error merging alt leaves: %w", err) + } + // Merge the finished TAP level commitment with the existing // one (if any) for the anchor output. anchorOutputCommitment, ok := outputCommitments[anchorOutputIdx] @@ -1570,6 +1580,37 @@ func AssertInputsUnique(packets []*tappsbt.VPacket) error { return nil } +// AssertOutputAltLeavesValid checks that, for each anchor output, the AltLeaves +// carried by all packets assigned to that output can be used to construct an +// AltCommitment. +func AssertOutputAltLeavesValid(vPackets []*tappsbt.VPacket) error { + anchorLeaves := make(map[uint32]fn.Set[[32]byte]) + + for _, pkt := range vPackets { + for _, vOut := range pkt.Outputs { + if len(vOut.AltLeaves) == 0 { + continue + } + + // Build a set of AltLeaf keys for each anchor output. + outIndex := vOut.AnchorOutputIndex + if _, ok := anchorLeaves[outIndex]; !ok { + anchorLeaves[outIndex] = fn.NewSet[[32]byte]() + } + + err := asset.AddLeafKeysVerifyUnique( + anchorLeaves[outIndex], vOut.AltLeaves, + ) + if err != nil { + return fmt.Errorf("anchor output %d: %w", + outIndex, err) + } + } + } + + return nil +} + // ExtractUnSpendable extracts all tombstones and burns from the active input // commitment. func ExtractUnSpendable(c *commitment.TapCommitment) []*asset.Asset { @@ -1688,6 +1729,9 @@ func ValidateAnchorOutputs(anchorPacket *psbt.Packet, outputSiblings = make( map[uint32]*commitment.TapscriptPreimage, ) + outputAltLeaves = make( + map[uint32][]asset.AltLeaf[asset.Asset], + ) outputCommitVersions = make( map[uint32]*commitment.TapCommitmentVersion, ) @@ -1786,6 +1830,10 @@ func ValidateAnchorOutputs(anchorPacket *psbt.Packet, vOut.Asset, ) outputSiblings[vOut.AnchorOutputIndex] = siblingPreimage + outputAltLeaves[vOut.AnchorOutputIndex] = append( + outputAltLeaves[vOut.AnchorOutputIndex], + asset.CopyAltLeaves(vOut.AltLeaves)..., + ) // Fetch the tap commitment version from the proof of // inclusion for the vOutput. @@ -1848,6 +1896,17 @@ func ValidateAnchorOutputs(anchorPacket *psbt.Packet, } } + // Each output must have a valid set of AltLeaves at this point. + for anchorIdx, leaves := range outputAltLeaves { + err := asset.ValidAltLeaves(leaves) + if err != nil { + finalErr := fmt.Errorf("output %d invalid alt "+ + "leaves: %w", anchorIdx, err) + log.Tracef(finalErr.Error()) + return finalErr + } + } + // We can now go through each anchor output that will carry assets and // check that we arrive at the correct script. for anchorIdx, assets := range outputAssets { @@ -1859,6 +1918,14 @@ func ValidateAnchorOutputs(anchorPacket *psbt.Packet, "output assets: %w", err) } + err = anchorCommitment.MergeAltLeaves( + outputAltLeaves[anchorIdx], + ) + if err != nil { + return fmt.Errorf("unable to merge output alt leaves: "+ + "%w", err) + } + anchorOut := &anchorPacket.Outputs[anchorIdx] anchorTxOut := anchorPacket.UnsignedTx.TxOut[anchorIdx] internalKey, err := schnorr.ParsePubKey( @@ -1947,6 +2014,9 @@ func ValidateAnchorInputs(anchorPacket *psbt.Packet, packets []*tappsbt.VPacket, inputSiblings = make( map[wire.OutPoint]*commitment.TapscriptPreimage, ) + inputAltLeaves = make( + map[wire.OutPoint][]asset.AltLeaf[asset.Asset], + ) inputAnchorIndex = make(map[wire.OutPoint]uint32) ) for _, vPkt := range packets { @@ -2036,6 +2106,10 @@ func ValidateAnchorInputs(anchorPacket *psbt.Packet, packets []*tappsbt.VPacket, inputAssets[outpoint], vIn.Asset(), ) inputSiblings[outpoint] = sibling + inputAltLeaves[outpoint] = append( + inputAltLeaves[outpoint], + asset.CopyAltLeaves(vIn.AltLeaves)..., + ) inputScripts[outpoint] = anchorIn.WitnessUtxo.PkScript inputAnchors[outpoint] = vIn.Anchor } @@ -2049,6 +2123,15 @@ func ValidateAnchorInputs(anchorPacket *psbt.Packet, packets []*tappsbt.VPacket, ) } + // Each input must have a valid set of AltLeaves at this point. + for outpoint, leaves := range inputAltLeaves { + err := asset.ValidAltLeaves(leaves) + if err != nil { + return fmt.Errorf("input %v invalid alt leaves: %w", + outpoint.String(), err) + } + } + // We can now go through each anchor input that contains assets being // spent and check that we arrive at the correct script. for anchorOutpoint, assets := range inputAssets { @@ -2060,6 +2143,14 @@ func ValidateAnchorInputs(anchorPacket *psbt.Packet, packets []*tappsbt.VPacket, "output assets: %w", err) } + err = anchorCommitment.MergeAltLeaves( + inputAltLeaves[anchorOutpoint], + ) + if err != nil { + return fmt.Errorf("unable to merge input alt leaves: "+ + "%w", err) + } + anchorIdx := inputAnchorIndex[anchorOutpoint] anchorIn := inputAnchors[anchorOutpoint] internalKey := anchorIn.InternalKey diff --git a/tapsend/send_test.go b/tapsend/send_test.go index c3dcf5919..642cce2f6 100644 --- a/tapsend/send_test.go +++ b/tapsend/send_test.go @@ -335,7 +335,7 @@ func createGenesisProof(t *testing.T, state *spendData) { state.asset2GenesisProof = asset2GenesisProof } -func createPacket(addr address.Tap, prevInput asset.PrevID, +func createPacket(t *testing.T, addr address.Tap, prevInput asset.PrevID, state spendData, inputSet commitment.InputSet, fullValueInteractive bool) *tappsbt.VPacket { @@ -378,6 +378,31 @@ func createPacket(addr address.Tap, prevInput asset.PrevID, } vPacket.SetInputAsset(0, inputAsset) + makeAltLeaves := func() []*asset.Asset { + numAltLeaves := (test.RandInt[uint8]() % 4) + if numAltLeaves == 0 { + return nil + } + + innerAltLeaves := make([]*asset.Asset, 0, numAltLeaves) + for range numAltLeaves { + scriptKey := asset.NewScriptKey(test.RandPubKey(t)) + baseLeaf, err := asset.NewAltLeaf( + scriptKey, asset.ScriptV0, nil, + ) + require.NoError(t, err) + + innerAltLeaves = append(innerAltLeaves, baseLeaf) + } + + return innerAltLeaves + } + + for outputIdx := range len(vPacket.Outputs) { + err := vPacket.Outputs[outputIdx].SetAltLeaves(makeAltLeaves()) + require.NoError(t, err) + } + return vPacket } @@ -567,6 +592,36 @@ func checkOutputCommitments(t *testing.T, vPkt *tappsbt.VPacket, includesAssetCommitment = false } + // Check the state of the AltCommitment for each vOutput. + for _, vOut := range vPkt.Outputs { + hasAltLeaves := len(vOut.AltLeaves) > 0 + anchorCommitment := outputCommitments[vOut.AnchorOutputIndex] + anchorAssetCommits := anchorCommitment.Commitments() + altCommitment, ok := anchorAssetCommits[asset.EmptyGenesisID] + + // If there were any AltLeaves, there must be a non-empty + // AltCommitment. Otherwise, there must be no AltCommitment + // root. + require.Equal(t, hasAltLeaves, ok) + if !ok { + continue + } + + // For each AltLeaf of a vOutput, there must be an equivalent + // asset leaf in the AltCommitment. + matchingAltLeaf := func(a asset.AltLeaf[asset.Asset]) bool { + leafKey := a.AssetCommitmentKey() + altLeaf, _, err := altCommitment.AssetProof(leafKey) + require.NoError(t, err) + require.NotNil(t, altLeaf) + + leaf := a.(*asset.Asset) + return leaf.DeepEqual(altLeaf) + } + + require.True(t, fn.All(vOut.AltLeaves, matchingAltLeaf)) + } + inputMatchingAsset := !isSplit // If our spend creates an un-spendable root, no asset should exist @@ -765,7 +820,7 @@ var prepareOutputAssetsTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address1, state.asset2PrevID, + t, state.address1, state.asset2PrevID, state, state.asset2InputAssets, false, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -783,7 +838,7 @@ var prepareOutputAssetsTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address1, state.asset2PrevID, + t, state.address1, state.asset2PrevID, state, state.asset2InputAssets, false, ) @@ -799,7 +854,7 @@ var prepareOutputAssetsTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address2, state.asset2PrevID, + t, state.address2, state.asset2PrevID, state, state.asset2InputAssets, false, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -818,7 +873,7 @@ var prepareOutputAssetsTestCases = []testCase{{ state.address2.ScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address2, state.asset2PrevID, + t, state.address2, state.asset2PrevID, state, state.asset2InputAssets, true, ) return tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -830,7 +885,7 @@ var prepareOutputAssetsTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address2, state.asset2PrevID, + t, state.address2, state.asset2PrevID, state, state.asset2InputAssets, true, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -849,7 +904,7 @@ var prepareOutputAssetsTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1CollectGroup, + t, state.address1CollectGroup, state.asset1CollectGroupPrevID, state, state.asset1CollectGroupInputAssets, false, ) @@ -869,7 +924,7 @@ var prepareOutputAssetsTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address2, state.asset2PrevID, + t, state.address2, state.asset2PrevID, state, state.asset2InputAssets, false, ) return tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -882,7 +937,7 @@ var prepareOutputAssetsTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1CollectGroup, + t, state.address1CollectGroup, state.asset1CollectGroupPrevID, state, state.asset1CollectGroupInputAssets, false, ) @@ -922,7 +977,7 @@ var signVirtualTransactionTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1, state.asset1PrevID, + t, state.address1, state.asset1PrevID, state, state.asset1InputAssets, false, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -941,7 +996,7 @@ var signVirtualTransactionTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1, state.asset1PrevID, + t, state.address1, state.asset1PrevID, state, state.asset1InputAssets, false, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -962,7 +1017,7 @@ var signVirtualTransactionTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1CollectGroup, + t, state.address1CollectGroup, state.asset1CollectGroupPrevID, state, state.asset1CollectGroupInputAssets, false, ) @@ -987,7 +1042,7 @@ var signVirtualTransactionTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address1CollectGroup, + t, state.address1CollectGroup, state.asset1CollectGroupPrevID, state, state.asset1CollectGroupInputAssets, true, ) @@ -1012,7 +1067,7 @@ var signVirtualTransactionTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address1, state.asset1PrevID, + t, state.address1, state.asset1PrevID, state, state.asset1InputAssets, true, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -1035,7 +1090,7 @@ var signVirtualTransactionTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address1, state.asset2PrevID, + t, state.address1, state.asset2PrevID, state, state.asset2InputAssets, false, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -1059,7 +1114,7 @@ var signVirtualTransactionTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1CollectGroup, + t, state.address1CollectGroup, state.asset1CollectGroupPrevID, state, state.asset1CollectGroupInputAssets, false, ) @@ -1103,7 +1158,7 @@ var createOutputCommitmentsTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1, state.asset1PrevID, + t, state.address1, state.asset1PrevID, state, state.asset1InputAssets, false, ) tpl := pkt.Outputs[1] @@ -1126,6 +1181,43 @@ var createOutputCommitmentsTestCases = []testCase{{ return err }, err: tapsend.ErrInvalidAnchorOutputInfo, +}, { + name: "incompatible alt leaves", + f: func(t *testing.T) error { + state := initSpendScenario(t) + state.spenderScriptKey = *asset.NUMSPubKey + + pkt := createPacket( + t, state.address1, state.asset1PrevID, + state, state.asset1InputAssets, false, + ) + tpl := pkt.Outputs[1] + + altLeafScriptKey := asset.NewScriptKey(test.RandPubKey(t)) + newAltLeaf, err := asset.NewAltLeaf( + altLeafScriptKey, asset.ScriptV0, nil, + ) + require.NoError(t, err) + + pkt.Outputs[1].AltLeaves = append( + pkt.Outputs[1].AltLeaves, newAltLeaf, + ) + + require.NoError(t, err) + pkt.Outputs = append(pkt.Outputs, &tappsbt.VOutput{ + AnchorOutputIndex: tpl.AnchorOutputIndex, + AnchorOutputInternalKey: tpl.AnchorOutputInternalKey, + AltLeaves: []asset.AltLeaf[asset.Asset]{ + newAltLeaf, + }, + }) + + _, err = tapsend.CreateOutputCommitments( + []*tappsbt.VPacket{pkt}, + ) + return err + }, + err: asset.ErrDuplicateAltLeafKey, }, { name: "non-interactive collectible with group key", f: func(t *testing.T) error { @@ -1133,7 +1225,7 @@ var createOutputCommitmentsTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1CollectGroup, + t, state.address1CollectGroup, state.asset1CollectGroupPrevID, state, state.asset1CollectGroupInputAssets, false, ) @@ -1159,7 +1251,7 @@ var createOutputCommitmentsTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address1, state.asset1PrevID, + t, state.address1, state.asset1PrevID, state, state.asset1InputAssets, true, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -1184,7 +1276,7 @@ var createOutputCommitmentsTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address1, state.asset2PrevID, + t, state.address1, state.asset2PrevID, state, state.asset2InputAssets, false, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -1210,7 +1302,7 @@ var createOutputCommitmentsTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address2, state.asset2PrevID, + t, state.address2, state.asset2PrevID, state, state.asset2InputAssets, false, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -1236,7 +1328,7 @@ var createOutputCommitmentsTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1CollectGroup, + t, state.address1CollectGroup, state.asset1CollectGroupPrevID, state, state.asset1CollectGroupInputAssets, false, ) @@ -1281,7 +1373,7 @@ var updateTaprootOutputKeysTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1, state.asset1PrevID, + t, state.address1, state.asset1PrevID, state, state.asset1InputAssets, false, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -1314,7 +1406,7 @@ var updateTaprootOutputKeysTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1, state.asset1PrevID, + t, state.address1, state.asset1PrevID, state, state.asset1InputAssets, false, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -1346,7 +1438,7 @@ var updateTaprootOutputKeysTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address1CollectGroup, + t, state.address1CollectGroup, state.asset1CollectGroupPrevID, state, state.asset1CollectGroupInputAssets, true, ) @@ -1383,7 +1475,7 @@ var updateTaprootOutputKeysTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address1, state.asset1PrevID, + t, state.address1, state.asset1PrevID, state, state.asset1InputAssets, true, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -1419,7 +1511,7 @@ var updateTaprootOutputKeysTestCases = []testCase{{ state := initSpendScenario(t) pkt := createPacket( - state.address1, state.asset2PrevID, + t, state.address1, state.asset2PrevID, state, state.asset2InputAssets, false, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -1456,7 +1548,7 @@ var updateTaprootOutputKeysTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address2, state.asset2PrevID, + t, state.address2, state.asset2PrevID, state, state.asset2InputAssets, false, ) err := tapsend.PrepareOutputAssets(context.Background(), pkt) @@ -1493,7 +1585,7 @@ var updateTaprootOutputKeysTestCases = []testCase{{ state.spenderScriptKey = *asset.NUMSPubKey pkt := createPacket( - state.address1CollectGroup, + t, state.address1CollectGroup, state.asset1CollectGroupPrevID, state, state.asset1CollectGroupInputAssets, false, ) @@ -1537,7 +1629,7 @@ func createSpend(t *testing.T, state *spendData, inputSet commitment.InputSet, } pkt := createPacket( - spendAddress, state.asset2PrevID, *state, inputSet, false, + t, spendAddress, state.asset2PrevID, *state, inputSet, false, ) // For all other tests it's okay to test external indexes that are @@ -2407,6 +2499,7 @@ func TestValidateAnchorOutputs(t *testing.T) { key1 = test.RandPubKey(t) key2 = test.RandPubKey(t) asset1 = asset.RandAsset(t, asset.RandAssetType(t)) + altLeaves = asset.ToAltLeaves(asset.RandAltLeaves(t, true)) emptyProof = &proof.CommitmentProof{} vOutSibling = &tappsbt.VOutput{ AnchorOutputIndex: 0, @@ -2418,6 +2511,7 @@ func TestValidateAnchorOutputs(t *testing.T) { CommitmentProof: emptyProof, }, }, + AltLeaves: altLeaves, } vOutNoSibling = &tappsbt.VOutput{ AnchorOutputIndex: 0, @@ -2428,12 +2522,16 @@ func TestValidateAnchorOutputs(t *testing.T) { CommitmentProof: emptyProof, }, }, + AltLeaves: altLeaves, } keyRoot = tappsbt.PsbtKeyTypeOutputTaprootMerkleRoot ) asset1Commitment, err := commitment.FromAssets(nil, asset1) require.NoError(t, err) + err = asset1Commitment.MergeAltLeaves(altLeaves) + require.NoError(t, err) + vOutCommitmentProof := proof.CommitmentProof{ Proof: commitment.Proof{ TaprootAssetProof: commitment.TaprootAssetProof{