From 663749b92e5b824e4716808c402f001fe2183622 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Thu, 19 Jun 2025 17:23:38 +0200 Subject: [PATCH 1/2] tapdb: modify type of transfer ID foreign key in burn table This aligns the foreign key to be the same type as the referenced table's primary key. This was an oversight that resulted from our type replacement map we use to change the types of our primary keys to be compatible with what SQLite and Postgres support. So even though all our primary keys in the SQL files are defined as INTEGER PRIMARY KEY, they are rewritten to BIGSERIAL PRIMARY KEY in Postgres to allow auto increment, which corresponds to a BIGINT. See scripts/gen_sqlc_docker.sh for a more in-depth explanation. --- tapdb/assets_store.go | 13 +++----- tapdb/assets_store_test.go | 4 +-- tapdb/migrations.go | 2 +- ...0037_insert_asset_burns_migration.down.sql | 31 ++++++++++++++++++ ...000037_insert_asset_burns_migration.up.sql | 32 +++++++++++++++++++ tapdb/sqlc/models.go | 2 +- tapdb/sqlc/schemas/generated_schema.sql | 8 ++--- tapdb/sqlc/transfers.sql.go | 2 +- 8 files changed, 77 insertions(+), 17 deletions(-) create mode 100644 tapdb/sqlc/migrations/000037_insert_asset_burns_migration.down.sql create mode 100644 tapdb/sqlc/migrations/000037_insert_asset_burns_migration.up.sql diff --git a/tapdb/assets_store.go b/tapdb/assets_store.go index 02fdb4b04..d4f8a791f 100644 --- a/tapdb/assets_store.go +++ b/tapdb/assets_store.go @@ -3312,14 +3312,11 @@ func (a *AssetStore) LogAnchorTxConfirm(ctx context.Context, // in the transfer. for _, b := range burns { _, err = q.InsertBurn(ctx, sqlc.InsertBurnParams{ - TransferID: int32(assetTransfer.ID), - Note: sql.NullString{ - String: b.Note, - Valid: b.Note != "", - }, - AssetID: b.AssetID, - GroupKey: b.GroupKey, - Amount: int64(b.Amount), + TransferID: assetTransfer.ID, + Note: sqlStr(b.Note), + AssetID: b.AssetID, + GroupKey: b.GroupKey, + Amount: int64(b.Amount), }) if err != nil { return fmt.Errorf("failed to insert burn in "+ diff --git a/tapdb/assets_store_test.go b/tapdb/assets_store_test.go index 0361acf43..5a461a149 100644 --- a/tapdb/assets_store_test.go +++ b/tapdb/assets_store_test.go @@ -2865,7 +2865,7 @@ func TestQueryAssetBurns(t *testing.T) { assetID := inputAsset.ID() _, err = assetsStore.db.InsertBurn(ctx, sqlc.InsertBurnParams{ - TransferID: int32(assetTransfers[0].ID), + TransferID: assetTransfers[0].ID, Note: sql.NullString{ String: "burn", Valid: true, @@ -2883,7 +2883,7 @@ func TestQueryAssetBurns(t *testing.T) { require.Len(t, burns, 1) _, err = assetsStore.db.InsertBurn(ctx, sqlc.InsertBurnParams{ - TransferID: int32(assetTransfers[0].ID), + TransferID: assetTransfers[0].ID, Note: sql.NullString{ String: "burn", Valid: true, diff --git a/tapdb/migrations.go b/tapdb/migrations.go index 51ef0a681..b53050307 100644 --- a/tapdb/migrations.go +++ b/tapdb/migrations.go @@ -24,7 +24,7 @@ const ( // daemon. // // NOTE: This MUST be updated when a new migration is added. - LatestMigrationVersion = 36 + LatestMigrationVersion = 37 ) // DatabaseBackend is an interface that contains all methods our different diff --git a/tapdb/sqlc/migrations/000037_insert_asset_burns_migration.down.sql b/tapdb/sqlc/migrations/000037_insert_asset_burns_migration.down.sql new file mode 100644 index 000000000..591692abd --- /dev/null +++ b/tapdb/sqlc/migrations/000037_insert_asset_burns_migration.down.sql @@ -0,0 +1,31 @@ +-- We roll back the transfer ID type change from BIGINT to INTEGER. + +CREATE TABLE IF NOT EXISTS asset_burn_transfers_corrected ( + -- The auto-incrementing integer that identifies this burn transfer. + burn_id INTEGER PRIMARY KEY, + + -- A reference to the primary key of the transfer that includes this burn. + transfer_id INTEGER NOT NULL REFERENCES asset_transfers(id), + + -- A note that may contain user defined metadata. + note TEXT, + + -- The asset id of the burnt asset. + asset_id BLOB NOT NULL REFERENCES genesis_assets(asset_id), + + -- The group key of the group the burnt asset belonged to. + group_key BLOB REFERENCES asset_groups(tweaked_group_key), + + -- The amount of the asset that was burned. + amount BIGINT NOT NULL +); + +INSERT INTO asset_burn_transfers_corrected ( + burn_id, transfer_id, note, asset_id, group_key, amount +) +SELECT burn_id, transfer_id, note, asset_id, group_key, amount +FROM asset_burn_transfers; + +DROP TABLE asset_burn_transfers; + +ALTER TABLE asset_burn_transfers_corrected RENAME TO asset_burn_transfers; diff --git a/tapdb/sqlc/migrations/000037_insert_asset_burns_migration.up.sql b/tapdb/sqlc/migrations/000037_insert_asset_burns_migration.up.sql new file mode 100644 index 000000000..f0e578fb5 --- /dev/null +++ b/tapdb/sqlc/migrations/000037_insert_asset_burns_migration.up.sql @@ -0,0 +1,32 @@ +-- We need to modify the transfer ID to be a BIGINT instead of INTEGER, +-- otherwise at some point things will break unexpectedly. + +CREATE TABLE IF NOT EXISTS asset_burn_transfers_corrected ( + -- The auto-incrementing integer that identifies this burn transfer. + burn_id INTEGER PRIMARY KEY, + + -- A reference to the primary key of the transfer that includes this burn. + transfer_id BIGINT NOT NULL REFERENCES asset_transfers(id), + + -- A note that may contain user defined metadata. + note TEXT, + + -- The asset id of the burnt asset. + asset_id BLOB NOT NULL REFERENCES genesis_assets(asset_id), + + -- The group key of the group the burnt asset belonged to. + group_key BLOB REFERENCES asset_groups(tweaked_group_key), + + -- The amount of the asset that was burned. + amount BIGINT NOT NULL +); + +INSERT INTO asset_burn_transfers_corrected ( + burn_id, transfer_id, note, asset_id, group_key, amount +) +SELECT burn_id, transfer_id, note, asset_id, group_key, amount +FROM asset_burn_transfers; + +DROP TABLE asset_burn_transfers; + +ALTER TABLE asset_burn_transfers_corrected RENAME TO asset_burn_transfers; diff --git a/tapdb/sqlc/models.go b/tapdb/sqlc/models.go index df9f7259a..10749dfe0 100644 --- a/tapdb/sqlc/models.go +++ b/tapdb/sqlc/models.go @@ -56,7 +56,7 @@ type Asset struct { type AssetBurnTransfer struct { BurnID int64 - TransferID int32 + TransferID int64 Note sql.NullString AssetID []byte GroupKey []byte diff --git a/tapdb/sqlc/schemas/generated_schema.sql b/tapdb/sqlc/schemas/generated_schema.sql index 7d84af3a7..686104740 100644 --- a/tapdb/sqlc/schemas/generated_schema.sql +++ b/tapdb/sqlc/schemas/generated_schema.sql @@ -96,13 +96,13 @@ CREATE TABLE addrs ( proof_courier_addr BLOB NOT NULL ); -CREATE TABLE asset_burn_transfers ( +CREATE TABLE "asset_burn_transfers" ( -- The auto-incrementing integer that identifies this burn transfer. - burn_id INTEGER PRIMARY KEY, + burn_id INTEGER PRIMARY KEY, -- A reference to the primary key of the transfer that includes this burn. - transfer_id INTEGER NOT NULL REFERENCES asset_transfers(id), - + transfer_id BIGINT NOT NULL REFERENCES asset_transfers(id), + -- A note that may contain user defined metadata. note TEXT, diff --git a/tapdb/sqlc/transfers.sql.go b/tapdb/sqlc/transfers.sql.go index 057559bc3..2ec3dec3d 100644 --- a/tapdb/sqlc/transfers.sql.go +++ b/tapdb/sqlc/transfers.sql.go @@ -369,7 +369,7 @@ RETURNING burn_id ` type InsertBurnParams struct { - TransferID int32 + TransferID int64 Note sql.NullString AssetID []byte GroupKey []byte From 66f810670f87790775210a2a0b27bdc46ec3df73 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Thu, 19 Jun 2025 17:27:45 +0200 Subject: [PATCH 2/2] tapd: add post migration step for adding burns to table We only added the burn table in the most recent release. But users might have burned assets before, which wouldn't be shown when listing burns (only with is_burn=true when listing assets). This migration retroactively inserts burned assets into the burn table that aren't there yet. --- tapdb/migrations_test.go | 24 +++ tapdb/post_migration_checks.go | 103 +++++++++++- .../migrations_test_00037_dummy_data.sql | 155 ++++++++++++++++++ 3 files changed, 281 insertions(+), 1 deletion(-) create mode 100644 tapdb/testdata/migrations_test_00037_dummy_data.sql diff --git a/tapdb/migrations_test.go b/tapdb/migrations_test.go index 0696b3c5e..08730fd63 100644 --- a/tapdb/migrations_test.go +++ b/tapdb/migrations_test.go @@ -670,3 +670,27 @@ func TestMigration33(t *testing.T) { ), ) } + +// TestMigration37 tests that the Golang based post-migration check for the +// asset burn insertion works as expected. +func TestMigration37(t *testing.T) { + ctx := context.Background() + + db := NewTestDBWithVersion(t, 36) + + // We need to insert some test data that will be affected by the + // migration number 37. + InsertTestdata(t, db.BaseDB, "migrations_test_00037_dummy_data.sql") + + // And now that we have test data inserted, we can migrate to the latest + // version. + err := db.ExecuteMigrations(TargetLatest, WithPostStepCallbacks( + makePostStepCallbacks(db, postMigrationChecks), + )) + require.NoError(t, err) + + burns, err := db.QueryBurns(ctx, QueryBurnsFilters{}) + require.NoError(t, err) + + require.Len(t, burns, 5) +} diff --git a/tapdb/post_migration_checks.go b/tapdb/post_migration_checks.go index 08ca986c1..44a2ddf33 100644 --- a/tapdb/post_migration_checks.go +++ b/tapdb/post_migration_checks.go @@ -7,6 +7,7 @@ import ( "time" "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/golang-migrate/migrate/v4" "github.com/golang-migrate/migrate/v4/database" "github.com/lightninglabs/taproot-assets/asset" @@ -20,6 +21,11 @@ const ( // Migration33ScriptKeyType is the version of the migration that // introduces the script key type. Migration33ScriptKeyType = 33 + + // Migration37InsertAssetBurns is the version of the migration that + // inserts the asset burns into the specific asset burns table by + // querying all assets and detecting burns from their witnesses. + Migration37InsertAssetBurns = 37 ) // postMigrationCheck is a function type for a function that performs a @@ -32,7 +38,8 @@ var ( // applied. These functions are used to perform additional checks on the // database state that are not fully expressible in SQL. postMigrationChecks = map[uint]postMigrationCheck{ - Migration33ScriptKeyType: determineAndAssignScriptKeyType, + Migration33ScriptKeyType: determineAndAssignScriptKeyType, + Migration37InsertAssetBurns: insertAssetBurns, } ) @@ -216,3 +223,97 @@ func determineAndAssignScriptKeyType(ctx context.Context, return nil } + +// insertAssetBurns queries all assets and detects burns from their witnesses, +// then inserts the asset burns into the specific asset burns table. +func insertAssetBurns(ctx context.Context, q sqlc.Querier) error { + defaultClock := clock.NewDefaultClock() + + log.Debugf("Detecting script key types") + + // We start by fetching all assets, even the spent ones. We then collect + // a list of the burn keys from the assets (because burn keys can only + // be calculated from the asset's witness). + assetFilter := QueryAssetFilters{ + Now: sql.NullTime{ + Time: defaultClock.Now().UTC(), + Valid: true, + }, + } + dbAssets, assetWitnesses, err := fetchAssetsWithWitness( + ctx, q, assetFilter, + ) + if err != nil { + return fmt.Errorf("error fetching assets: %w", err) + } + + chainAssets, err := dbAssetsToChainAssets( + dbAssets, assetWitnesses, defaultClock, + ) + if err != nil { + return fmt.Errorf("error converting assets: %w", err) + } + + burnAssets := fn.Filter(chainAssets, func(a *asset.ChainAsset) bool { + return a.IsBurn() + }) + + burnsInTable, err := q.QueryBurns(ctx, sqlc.QueryBurnsParams{}) + if err != nil { + return err + } + + burnsMatch := func(b sqlc.QueryBurnsRow, a *asset.ChainAsset) bool { + txMatch := (chainhash.Hash(b.AnchorTxid)) == a.AnchorTx.TxHash() + assetIDMatch := (asset.ID(b.AssetID)) == a.ID() + amountMatch := uint64(b.Amount) == a.Amount + return txMatch && assetIDMatch && amountMatch + } + burnAssetsNotInTable := fn.Filter( + burnAssets, func(a *asset.ChainAsset) bool { + return fn.NotAny( + burnsInTable, func(b sqlc.QueryBurnsRow) bool { + return burnsMatch(b, a) + }, + ) + }, + ) + + log.Debugf("Found %d asset burns not in burn table, adding them now", + len(burnAssetsNotInTable)) + for _, burnAsset := range burnAssetsNotInTable { + assetTransfers, err := q.QueryAssetTransfers(ctx, TransferQuery{ + AnchorTxHash: fn.ByteSlice(burnAsset.AnchorTx.TxHash()), + }) + if err != nil { + return fmt.Errorf("unable to query asset transfers: %w", + err) + } + if len(assetTransfers) != 1 { + log.Warnf("Found %d asset transfers for burn asset "+ + "%s, expected 1: %v", len(assetTransfers), + burnAsset.ID(), assetTransfers) + + continue + } + assetTransfer := assetTransfers[0] + + var groupKeyBytes []byte + if burnAsset.GroupKey != nil { + gk := burnAsset.GroupKey.GroupPubKey + groupKeyBytes = gk.SerializeCompressed() + } + + _, err = q.InsertBurn(ctx, sqlc.InsertBurnParams{ + TransferID: assetTransfer.ID, + AssetID: fn.ByteSlice(burnAsset.ID()), + GroupKey: groupKeyBytes, + Amount: int64(burnAsset.Amount), + }) + if err != nil { + return fmt.Errorf("error inserting burn: %w", err) + } + } + + return nil +} diff --git a/tapdb/testdata/migrations_test_00037_dummy_data.sql b/tapdb/testdata/migrations_test_00037_dummy_data.sql new file mode 100644 index 000000000..b054a80a7 --- /dev/null +++ b/tapdb/testdata/migrations_test_00037_dummy_data.sql @@ -0,0 +1,155 @@ +INSERT INTO chain_txns VALUES(1,X'8e279a78f8ca1e80d691599d7cdedf20c0eacab100765366b9695ed3ac5d376b',2059,X'020000000001011669f2132bab2f14e0093b8c1cf00b7d182621d8f2d456eb1554aa84d1d22b6d00000000000000000002e8030000000000002251208fafd758b8fc8b89e15f8a1dab499ee1ab58db6c31c94d7956490371c1fc607c0dd5f505000000002251209e60729369a53ef4423256260b767b0a58e0f34626f0bff69e444bd58dc289fb024730440220692d3d40992cc8fea45b32a53e8586b12619542ac08934c5ef2d59b481f8fe30022013b0e2ba9bc6dcf13c0c3fdca7b3770ebfa6c84e64be88059b6acda7d67127f1012102b702c7d4ae99e76aae5a46b07e81bd1e04d9cea512108db849764b65647f418a00000000',440,X'020bcf1eb2009f4821c42c788ff35257c04eae314856d917b8f448203b4d8564',1); +INSERT INTO chain_txns VALUES(2,X'6bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c085201',4390,X'020000000001028e279a78f8ca1e80d691599d7cdedf20c0eacab100765366b9695ed3ac5d376b0000000000000000002815861242c07ca8b9dca4161a85f993650f5ddda27d3acc785e86d27649e0d300000000000000000005e803000000000000225120ee9674d348f8c5449f4b4a7ce90b5db76c63dcf93513c9af373cea769c4291f7e803000000000000225120721a57b02daa999f5ffaec4db2ab75f4c61a5d421fa3e6e78a85745d0e82e10fe803000000000000225120bab124f0f968bfcc222fa74f1b6876cacdef3091c3370f006e16adc3a14d05e3e803000000000000225120511493be5127d29da987a86ad876fbf3a02164846f76c908c8f9b2cc6ed7d69822c4f505000000002251204585efb1b5efb926d04f2ce7b1cd667b8f249a316999ab469ccd02ddada0c1b901408f7af1582d91422ef4f0a2a54978351cd57b582d45539ffcdb62f551c94c7c7aa5a37b80bcf921058d25df2afce18474a79ed0ea7cccae6296e493dc2542be4c0247304402202ebc9b7b9b842f9661c8d1f66f815a86f2787654929d9aed4d474b66cc8b2c6c02200e74b5c9b9a7a9fb9a8e17b811e75000dd213fc6e247666d51cb9603b1a93b02012103d9095755ab7ea79e3679b4ad4b3fa36113cb5f09a36f7945e85eda4221ab81a900000000',441,X'fb4fb6bf7205409ab547ddc0684c6dd0d7cf28b1338b80949bd3a092bccfce18',1); +INSERT INTO chain_txns VALUES(3,X'07e55c1c48ae772d359116a25bd925fe48f0a8158048a76da82168a0a51994b3',3315,X'020000000001026bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c0852010100000000000000004907cdac28cf3ac7ea5bde04d92ffe5efd7eca3bd848c6454a6327862d05124a00000000000000000003e803000000000000225120d4e8bd36d3f2aa588778a34527534245da2c45d44da94be26cdc88a87eda4b95e803000000000000225120edd93455c422c0298522bbe4a7ccaba9c75eccfedde31d6af452c5dbd27587a525d0f50500000000225120d3c0a54261e3382c13e2808ee6b42fec0763a92c9e5ed48024be2c842a51369d0140034715233880f4eea2fc4325fadae372e061a871add1a6341452bfe314fb7da7c62f5ba48b5940f9eda154931036d9f9954f1e7162b00a0a08949e730cad4ca002483045022100de0195a61d732373c0e990e471dce0de1e0b3270d7e6664a5296e8296b6b9bd802207d7c161d8745fc8e3ec77138befb856904ea9f54cdbacfb806b3f9e4384aaf680121024b2f3122d60f4f7be148ae44467456dbe5f73d04811e468b5ed94e1356c42b1b00000000',442,X'dd548851c0f764890f01663a505b7e3d6cb90b285b041cee286f145d2aca2256',1); +INSERT INTO chain_txns VALUES(4,X'a4cb249a91a848ef97a44fe94d1903e82ba22a4e934fdc31aedc83877e61068e',3315,X'0200000000010207e55c1c48ae772d359116a25bd925fe48f0a8158048a76da82168a0a51994b301000000000000000060a74b6e1e5ef2723394c64b3f0727f580bf6fd87ef38a5d78d80245663b3f8f00000000000000000003e803000000000000225120393c05c47af12d4ba698e9d5765ec3688d807616d3e8aa25e466833b70f24794e8030000000000002251203a800efb7307ce844a9ed6be01d647a3f6ca455008d96c4687a7c52cff33ac9a25d0f50500000000225120e1d5103f37034dbc4edb15d1d8c34b64a85e4a76061d58656a0cbe7e323609850140713def1e2066ed59c9728047356ccf95a3b57b9f33382866a903f4929124beb9dd0216b687843bfc95d8ecad4719d5781f794712eb42d3bae5be40442dd3193502473044022074183d0d9175068117fdbcc370b219705ea23663ae99c6ea56f4abac06d7bf5802200fef4533953f0bc25dcc78701d3eb24752e8079452f43a84c40a094606f389fc01210219bff12c23b12f024cfd45186e780ea601d8a3ceafb410fabd25a6d3e899299600000000',443,X'37f83d401b3b09359b3bece53051033d4f2bacd693765f1c2194e5435cc17f2e',0); +INSERT INTO chain_txns VALUES(5,X'5660943edf2d9f1aec7ac6b1ff1dfa3d2a612a945c8161611cf2b5428f39cda3',3315,X'020000000001026bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520103000000000000000086fbe2ac35b74cd13017f8d2bb77728bc729792546a7d3f1328600a892ce6f6b00000000000000000003e8030000000000002251208f92db8ef1ecdde6c583446b05af8280ee8de6502fe85b9ad729751a307ae39ee8030000000000002251202cde2b7774135304d227250f5759f2678561042bd88d197d05d538e21f2c16c025d0f5050000000022512071dca848679966b0da2f25f38017ed685136d9fd45dcab7a50c41f33c46394ef0140d2a6306af2e4e08a31a91d8761749b19658ea1b51625e49caa3c3a3c9d2f49223e1bda309549b0d2ad3aaeb61c37ab011d0f33e14a6d8592462ad8fe75bed7700247304402203d103b6321d401df16455c20a878f1579c2d6cd0a2a1df5901922d890b409f13022064bd264787ff3ca83d40f2820db1e9eb35697cdb9888dea124a0ad6da4c1902b012102841dc45fc6716b8dc8f068138d8e8e541f34a8224c66ab12aed5bca5503c064200000000',444,X'4c371dfa48fbc3e220a914a7aa7f555cb2b392c23a0f11bf3764b737e6740b26',1); +INSERT INTO chain_txns VALUES(6,X'1ee1a121c14c89b4209ef0cad09729c447e0824f2c36b94ae10aa04264e22cd9',3900,X'02000000000103a4cb249a91a848ef97a44fe94d1903e82ba22a4e934fdc31aedc83877e61068e0100000000000000006bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c0852010000000000000000008e279a78f8ca1e80d691599d7cdedf20c0eacab100765366b9695ed3ac5d376b01000000000000000003e80300000000000022512014b9d0d40f699abcf2663d0df4217541295e9933d2f94e6495182e4205a24a72e80300000000000022512061775769c1e64f7afaf7955dcd84057bae86968d184a826e5ff35746be50313bd1c5f5050000000022512053bb578ed50edcd74355f62a3204c8483e0d57c4da774304e792f3dc0e0b37bc0140f5b23f6b424918be81e26b256561ab535b682430619ee2c7fa1a635922639849f9a5e1912f03ac7da7b98690876f635f389b0f742fb2492e558290c2313737390140fc51f4473310653c4f1b0cec4ee9c64d427e4987c48817ed2b4651252922ef60f2743ee5f25ecc4dcfeadee43bb2485c1c4460d3e9298767d79ae6005256cc5e01407db7333b3af704c0a5e43084d96a561979852ae6e8429cdcadddba59654035467fd97e6960eca8c89fead049871d174d915f6d3dbad67125925c81bdbd91ab4e00000000',445,X'0f1666b80fb3d00b40c41a74babc03d4ff0215c63d683e17a6bfba78df89a720',1); +INSERT INTO chain_txns VALUES(7,X'd3b2b91e741b2ac1e0cc4b3daedb75d292c71ebccfe689a7ff55e4176debde63',3181,X'020000000001025660943edf2d9f1aec7ac6b1ff1dfa3d2a612a945c8161611cf2b5428f39cda30100000000000000005660943edf2d9f1aec7ac6b1ff1dfa3d2a612a945c8161611cf2b5428f39cda302000000000000000003e803000000000000225120be876e26609c30def99ed8b671095d7341eb10919e6f751794eea8bc755ed030e8030000000000002251207204f99d5615b9581a7e514aad851b2256f755a0b6a3ea4f0eba3360fa4d6e5ad0bff50500000000225120f5c406781631b141c800e00054e106904765a555e0fdb4394e5ccc667bb6458c014060776629bd1b10e127eeb66843a2a3556baf428d6b864605fd17bcf93e7cc5b3c29ecfde55f3f7fc16e89487fa176b9110c3442bde50bf348b9aee39543dff9e0140cc22d12789ea2dc4257d4b603498c3030a0c2ce732849a943a24d2c1c5502ed3ed6072cc94ea1d3941920696c6d351cd680236b881f14b844bd57b81a2c8e3eb00000000',446,X'5d46307ba04116a36cc725d70b4b17ad485079fc32fc426013e5d0d37178ea75',1); +INSERT INTO chain_txns VALUES(8,X'21b1290f3d1aea1efed8642b46192cc0169cc61bf0e39e54f81405ed7d31ffcc',3181,X'02000000000102d3b2b91e741b2ac1e0cc4b3daedb75d292c71ebccfe689a7ff55e4176debde63010000000000000000a4cb249a91a848ef97a44fe94d1903e82ba22a4e934fdc31aedc83877e61068e02000000000000000003e80300000000000022512059d8302cec855f2c391a1933cc856bc238e577945a69dde1a9993ee04949a7f3e8030000000000002251203e5f757b544e118ecc5d00142ab1a1c2a42186df14378d11ec801f28bfa168e0d0bff50500000000225120338e48bf2119a76a7da0d0719dbb24d33a4e2fadd9ce2379c39874f4058c50bb01408ee4bc8f47570fa1bb9c87532522e0636c548f7eea9e50e2857c9c2d66fef70271e0632deb092cc9992d7a71ee5ef20a9d7e5075f168027c3e2073ecec7569400140314b0953a99d934b4792b85b8fd0a81e21256d670b48eaaa47e2c1dda1065732ebe9bd7c775d511a0f67f0796524736c9913ea2242b0069c6c17e59e4df665f800000000',447,X'1de33af67bb0ea9348414e8fdcdb813eb5ca2001271c18239b6cc08c237ae117',1); + +INSERT INTO genesis_points VALUES(1,X'1669f2132bab2f14e0093b8c1cf00b7d182621d8f2d456eb1554aa84d1d22b6d00000000',1); + +INSERT INTO assets_meta VALUES(1,X'811ad3c42f355c915d1fc4ba4ed71337092191431308f975d7acbc88a09ab981',X'736f6d65206d65746164617461',0,0,false,NULL,NULL); + +INSERT INTO genesis_assets VALUES(1,X'cc28ff8007b5876d6a49a9a1b5914193a0f2cdb343b8a73530ccf4a8cff005ed','itestbuxx-collectible-brrr',1,0,1,1); +INSERT INTO genesis_assets VALUES(2,X'5c402b7f5e62dd5a0e401958396874c4dc6d02f8e90b5735678837f3232f3fc9','itestbuxx-money-printer-brrr',1,0,0,1); +INSERT INTO genesis_assets VALUES(3,X'be69ada08113cd096655305d1f66f964981c32871d9c7b17165cf060b781913e','itestbuxx-collectible',1,0,1,1); +INSERT INTO genesis_assets VALUES(4,X'c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a33','itestbuxx',1,0,0,1); + +INSERT INTO internal_keys VALUES(1,X'02c6dbc768be73fdff805435ae0a01c5adda3f050697c411dde7f2a8aa11f74092',212,1); +INSERT INTO internal_keys VALUES(2,X'0316bff6f4a65d8795150cb08068a19670003f805bfe430a6849583f1fcc2833e5',212,0); +INSERT INTO internal_keys VALUES(3,X'03a390067d441e274fd4347530cd06e25dc8ec783a07a696837820484c09a3700e',212,2); +INSERT INTO internal_keys VALUES(4,X'0275145548feda06287c7d1ca9d7648606b9508cad64613c23bade5f118562279a',212,4); +INSERT INTO internal_keys VALUES(5,X'03e0f7f748302a141b7095a0eb7826cf985d2ea2e15ad8f8d7d2400d26e614f0f4',212,3); +INSERT INTO internal_keys VALUES(6,X'02b444858150a44f723a38f3f53a0df63e7b2aa48e385f4f620cb6a667643dc0f9',212,6); +INSERT INTO internal_keys VALUES(7,X'03314e1ab0b49fbda5c2257cb8ee4f9c10be42d12da39074a76ef67b0c020746b7',212,5); +INSERT INTO internal_keys VALUES(8,X'032065e96ec22b7bd4f4a2a84a83e826ba91d459752d25c5546ec63dd6d4ad69eb',212,7); +INSERT INTO internal_keys VALUES(9,X'02879706ba13a3e13a49785d62b22e6876a6875ddeac4f3d5817aa4b5bfdba97fd',212,8); +INSERT INTO internal_keys VALUES(10,X'03b1c55ba46e6948ddb1cce5269f4c1d9bd268cded5c9cb598a1910915d8c9a162',212,9); +INSERT INTO internal_keys VALUES(11,X'0220612c273d728266c26182508bdd84726bf387450b2ddef775c5b506eaeff815',212,10); +INSERT INTO internal_keys VALUES(12,X'027c5e0e522dc70efc9720f74eacd756da5aacf4751095aa5491bbcdf71f61637e',212,11); +INSERT INTO internal_keys VALUES(13,X'029e139b722f9497264c95379cb9cdcab89974891a7b29606d2439b600d5a9a30c',212,12); +INSERT INTO internal_keys VALUES(14,X'02e4d39f227d0baca23f41f039ff7afc5c144421160db90307763ba2e3ce589742',212,13); +INSERT INTO internal_keys VALUES(15,X'02e771aade86ac940e29fc4c7c3bdf2085b03a06efa52bc690dcceb451c071171c',212,14); +INSERT INTO internal_keys VALUES(16,X'03824b626c15d1ad59eac1f3fc94ed95bde9de7b313e711ab34793b7e71f0be68b',212,16); +INSERT INTO internal_keys VALUES(17,X'038f1c9a2571ba10cb4135608375ab49ffd7855b03743f8975e7dec9b9b3bcf815',212,15); +INSERT INTO internal_keys VALUES(18,X'02a9839b77e9fc45d98399ae8083d8106cb899f50b451622a32260082c18e0e2c7',212,20); +INSERT INTO internal_keys VALUES(19,X'0334f06b5caa34ed45fade1c83f21cddef224305f0bdf070a3d5ac5e9079eb0106',212,19); +INSERT INTO internal_keys VALUES(20,X'02393dec334318b40d7eb3cf6cf8c528e94dd1dedded936da3f6db1e6a3f016867',0,0); +INSERT INTO internal_keys VALUES(21,X'02774510514cacdc0a426be8e27adc1ca3d89219f636474f57ab0b098b447c4e0c',0,0); +INSERT INTO internal_keys VALUES(22,X'029c883b659353a77fd4679082f2b04c0d437c556427dc8d06f17e2fb250b20925',212,22); +INSERT INTO internal_keys VALUES(23,X'0335e8199151763ccf2db83215e64f9505b2c6c09e3d84404a38b2e9572487eab4',212,21); +INSERT INTO internal_keys VALUES(24,X'0397185ea72313a69e898e3b9967c4b1760f05565322e40165aa777d5cd3e32a29',212,23); +INSERT INTO internal_keys VALUES(25,X'027c79b9b26e463895eef5679d8558942c86c4ad2233adef01bc3e6d540b3653fe',0,0); +INSERT INTO internal_keys VALUES(26,X'03ab9ffced5abb2a1dc7f4323c09ffaa6bca5bb5680d74b487a53eb93dfacfa431',212,25); +INSERT INTO internal_keys VALUES(27,X'0387b1b354d3253f021b15a74a38d46b4704d8e4df129e6dad5b2b4d186705bc32',0,0); +INSERT INTO internal_keys VALUES(28,X'0259abecb6a3b011da764e85fbfb6ffe9a6f2b259edd7432178c3d0f03e33c2fac',0,0); +INSERT INTO internal_keys VALUES(29,X'02cfd63078e92366cc590c4686cada35642b046bf5879bf95987f4c3c09b06b715',212,28); +INSERT INTO internal_keys VALUES(30,X'02c62bd20ff92eadb219d500fb59f0a9801a66ba2f726ee1cd55b2b95d87543460',212,27); +INSERT INTO internal_keys VALUES(31,X'02c15469cc60fc645d4d01423c920911b750a3035a37b09587773d73b7d8fd8ff8',0,0); +INSERT INTO internal_keys VALUES(32,X'0264718024b9f684cf1318d0c84023ca96ffbee507b06a0cc09d92ccdd6d837c68',0,0); +INSERT INTO internal_keys VALUES(33,X'03b9f6c75a6412246d0dc6cc17f43c75f98d2c9ff6db45dd6c257e8d5b659301c1',212,31); +INSERT INTO internal_keys VALUES(34,X'0335dab2c01a99b0ab90088ca15245eb44bf1a89a7c3822a23948f3d92a292f243',212,30); +INSERT INTO internal_keys VALUES(35,X'03e460ebb6cc934c7d039ceb1bbe6863b0fb9d0dbfe6fa2ab3adaf585e2ba9bba6',0,0); +INSERT INTO internal_keys VALUES(36,X'02d068d49a22ad4169b3b1da01e7e43bcf78683cb8318c7e8f6e821544063490e4',0,0); +INSERT INTO internal_keys VALUES(37,X'0202b8e4ff495e71c3c780c715a81d3b1fa2db28eab2571b459877b6ba8713a3fd',212,33); +INSERT INTO internal_keys VALUES(38,X'03a4b8660d62df12a8ac64ec50ffb8beb6ce37724bad0aaf340e03c5f4372bf3e3',0,0); +INSERT INTO internal_keys VALUES(39,X'025792fcd2ce6fc13c7bdc135b03558df1a3a7929f37f592446808a50f69b4163e',0,0); + +INSERT INTO asset_groups VALUES(1,X'03507c1e543a26a4cecd96bb62a5cd5b331023c089f3074bd3af961d997b37b52b',NULL,7,1,0,NULL); +INSERT INTO asset_groups VALUES(2,X'02b68069216c382a091c6584955f42bb9be52bcae1fc6c0333208e89f9a861ebbc',NULL,5,1,0,NULL); + +INSERT INTO asset_group_witnesses VALUES(1,X'014039284e74a1854ae06b2e920df5581626169b25ef385c50a531874b2002784283820fea3ba9dd5db3792396ecd696cf40bbf372d64705dbaa8c306bf4eb762a17',1,1); +INSERT INTO asset_group_witnesses VALUES(2,X'0140c654f54b5de51a71f52eaeab19de2361134c6e374bc480bb147cd9b77b4d31bcb7c87fb792765dde8eddf80615fa4d92331be29e38bfb9a048fd430fbd8fc943',2,2); + +INSERT INTO managed_utxos VALUES(1,X'8e279a78f8ca1e80d691599d7cdedf20c0eacab100765366b9695ed3ac5d376b00000000',1000,1,X'0870b1fc242511b3046a8e35ce468f931c9c96fce2ff5313f64b07fc932ee2a5',NULL,X'0870b1fc242511b3046a8e35ce468f931c9c96fce2ff5313f64b07fc932ee2a5',1,X'6d7cd7ee247587eef86766140262685819deebc034ad80664fb74ec2ad6e11d7','2026-06-19 15:36:20.703325771',2); +INSERT INTO managed_utxos VALUES(2,X'6bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520103000000',1000,16,X'ba744c9c9158c7fbac21b57a538cadee104af35c3a1cc2e1f69780aaa6b2a272',NULL,X'ba744c9c9158c7fbac21b57a538cadee104af35c3a1cc2e1f69780aaa6b2a272',2,X'6d7cd7ee247587eef86766140262685819deebc034ad80664fb74ec2ad6e11d7','2026-06-19 15:36:22.149458044',2); +INSERT INTO managed_utxos VALUES(3,X'6bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520100000000',1000,9,X'35206fabbcd6235f54e6a3c20878baf22941787cdbed90070ee8f44a2bf5561f',NULL,X'35206fabbcd6235f54e6a3c20878baf22941787cdbed90070ee8f44a2bf5561f',2,X'6d7cd7ee247587eef86766140262685819deebc034ad80664fb74ec2ad6e11d7','2026-06-19 15:36:22.473257555',2); +INSERT INTO managed_utxos VALUES(4,X'6bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520101000000',1000,11,X'd19a4b3055225841d441949dbc808af692f195ccbb12b58461fd523fa93c72b0',NULL,X'd19a4b3055225841d441949dbc808af692f195ccbb12b58461fd523fa93c72b0',2,X'6d7cd7ee247587eef86766140262685819deebc034ad80664fb74ec2ad6e11d7','2026-06-19 15:36:21.045812907',2); +INSERT INTO managed_utxos VALUES(5,X'6bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520102000000',1000,13,X'454bce456e075c4d65fe23c027b83d6a5237edfe94d86f4a43986e92ed470cca',NULL,X'454bce456e075c4d65fe23c027b83d6a5237edfe94d86f4a43986e92ed470cca',2,NULL,NULL,2); +INSERT INTO managed_utxos VALUES(6,X'07e55c1c48ae772d359116a25bd925fe48f0a8158048a76da82168a0a51994b301000000',1000,18,X'8bbabe23cc35461fa8e6b96d1f3ef1f9afe12e1fd5ee8528091732579bae61c2',NULL,X'8bbabe23cc35461fa8e6b96d1f3ef1f9afe12e1fd5ee8528091732579bae61c2',3,X'6d7cd7ee247587eef86766140262685819deebc034ad80664fb74ec2ad6e11d7','2026-06-19 15:36:21.579457393',2); +INSERT INTO managed_utxos VALUES(7,X'07e55c1c48ae772d359116a25bd925fe48f0a8158048a76da82168a0a51994b300000000',1000,20,X'38ab8643c2eab507a27c73216a95e01e40e0324a8ab29f383616c79e88d3232c',NULL,X'38ab8643c2eab507a27c73216a95e01e40e0324a8ab29f383616c79e88d3232c',3,NULL,NULL,2); +INSERT INTO managed_utxos VALUES(8,X'a4cb249a91a848ef97a44fe94d1903e82ba22a4e934fdc31aedc83877e61068e00000000',1000,24,X'4f0b1feab601f696392e3aa758ad228997af5464845df0d67032614f5aa543dc',NULL,X'4f0b1feab601f696392e3aa758ad228997af5464845df0d67032614f5aa543dc',4,NULL,NULL,2); +INSERT INTO managed_utxos VALUES(9,X'a4cb249a91a848ef97a44fe94d1903e82ba22a4e934fdc31aedc83877e61068e01000000',1000,22,X'6beef32264c4e248247893a24fe22b888b76c9e09f5f169d6ae39daa6e9eb562',NULL,X'6beef32264c4e248247893a24fe22b888b76c9e09f5f169d6ae39daa6e9eb562',4,X'6d7cd7ee247587eef86766140262685819deebc034ad80664fb74ec2ad6e11d7','2026-06-19 15:36:22.473257555',2); +INSERT INTO managed_utxos VALUES(10,X'5660943edf2d9f1aec7ac6b1ff1dfa3d2a612a945c8161611cf2b5428f39cda301000000',1000,26,X'e0076c424fbbcd019c875596af3a44aaaf062acecf02835e8cd8e2451c20bd4f',NULL,X'e0076c424fbbcd019c875596af3a44aaaf062acecf02835e8cd8e2451c20bd4f',5,X'6d7cd7ee247587eef86766140262685819deebc034ad80664fb74ec2ad6e11d7','2026-06-19 15:36:22.854024638',2); +INSERT INTO managed_utxos VALUES(11,X'5660943edf2d9f1aec7ac6b1ff1dfa3d2a612a945c8161611cf2b5428f39cda300000000',1000,27,X'b0db9e6df842413f4258ce7d7d562b9df739c145b03a21611e4c5c9e0df710e9',NULL,X'b0db9e6df842413f4258ce7d7d562b9df739c145b03a21611e4c5c9e0df710e9',5,NULL,NULL,2); +INSERT INTO managed_utxos VALUES(12,X'1ee1a121c14c89b4209ef0cad09729c447e0824f2c36b94ae10aa04264e22cd901000000',1000,29,X'6f53689ca324abc95372d2a4b62da4ee0a6e740fb311247154aeeeb31d1ce7fc',NULL,X'6f53689ca324abc95372d2a4b62da4ee0a6e740fb311247154aeeeb31d1ce7fc',6,NULL,NULL,2); +INSERT INTO managed_utxos VALUES(13,X'1ee1a121c14c89b4209ef0cad09729c447e0824f2c36b94ae10aa04264e22cd900000000',1000,31,X'885b88f44ebf272d1765817cc8e75e9a83c042e6eb19c404e2b1a977d6e60d22',NULL,X'885b88f44ebf272d1765817cc8e75e9a83c042e6eb19c404e2b1a977d6e60d22',6,NULL,NULL,2); +INSERT INTO managed_utxos VALUES(14,X'd3b2b91e741b2ac1e0cc4b3daedb75d292c71ebccfe689a7ff55e4176debde6301000000',1000,33,X'0c1a42cb38f4776a12c87d3574fcde9668770c189924b265ec0f37dcd7a5949c',NULL,X'0c1a42cb38f4776a12c87d3574fcde9668770c189924b265ec0f37dcd7a5949c',7,X'6d7cd7ee247587eef86766140262685819deebc034ad80664fb74ec2ad6e11d7','2026-06-19 15:36:23.370742252',2); +INSERT INTO managed_utxos VALUES(15,X'd3b2b91e741b2ac1e0cc4b3daedb75d292c71ebccfe689a7ff55e4176debde6300000000',1000,35,X'777c1ce416824d584aa96988d9a7d39d49ab321fa7beec852f008a2f74d66636',NULL,X'777c1ce416824d584aa96988d9a7d39d49ab321fa7beec852f008a2f74d66636',7,NULL,NULL,2); +INSERT INTO managed_utxos VALUES(16,X'21b1290f3d1aea1efed8642b46192cc0169cc61bf0e39e54f81405ed7d31ffcc01000000',1000,37,X'4fb61ae26c56ed01ed1872423945efba8e5342886eef69e2b3aa3c72adca9e02',NULL,X'4fb61ae26c56ed01ed1872423945efba8e5342886eef69e2b3aa3c72adca9e02',8,NULL,NULL,2); +INSERT INTO managed_utxos VALUES(17,X'21b1290f3d1aea1efed8642b46192cc0169cc61bf0e39e54f81405ed7d31ffcc00000000',1000,38,X'3e90321acc6e3278d9d4e9934dbbdd5b8830170181f4525207b5ea87dee0a8d6',NULL,X'3e90321acc6e3278d9d4e9934dbbdd5b8830170181f4525207b5ea87dee0a8d6',8,NULL,NULL,2); + +INSERT INTO script_keys VALUES(1,2,X'0294537c86db5031f455a60fb897b5afd7f7d0926a86b57a818f6178bde1e4eb8b',NULL,1); +INSERT INTO script_keys VALUES(2,3,X'02711e2375719883c616994511b16ec9b72310301b31987541c35533997fdc4897',NULL,1); +INSERT INTO script_keys VALUES(3,4,X'0249af52a0cb7e468fb347a312759d4a2ed59708462f66f27b1b6420a475e09d2c',NULL,1); +INSERT INTO script_keys VALUES(4,6,X'02caae0e34c4ab29d4a1abb7e4ec4f2a47aa1e2cfc9e19eecf265313a06f90f091',NULL,1); +INSERT INTO script_keys VALUES(5,8,X'027938965111c8f1829040ebea82df815f888040e2af6a1f2047f3b74b994ba941',NULL,1); +INSERT INTO script_keys VALUES(6,10,X'026d6b3e98afe5c4a67c2dc63b61e9b293375bb98c71e13520691215db3d810d9c',NULL,1); +INSERT INTO script_keys VALUES(7,12,X'026a3175d26ed8d733f727f9de5623e6a2b319e1db2d8084b2479572fb2b4f7f54',NULL,1); +INSERT INTO script_keys VALUES(8,14,X'02ca566cd2fa6933c533fe5a69de540d3cd960328a60448db5318604349a749313',NULL,1); +INSERT INTO script_keys VALUES(9,17,X'024e97d867b61a98d410ec2ed4592c605f88feb58b16c793fc95dd8388ffaaf662',NULL,0); +INSERT INTO script_keys VALUES(10,19,X'02985680060084b80cce6ad2c1240483f6e4e056cbc4e0652e8e92dab9bf6323b4',NULL,1); +INSERT INTO script_keys VALUES(11,21,X'02774510514cacdc0a426be8e27adc1ca3d89219f636474f57ab0b098b447c4e0c',NULL,3); +INSERT INTO script_keys VALUES(12,23,X'0240f1c105c00e8ac6fad2d9669665d3b66b80c7798c26bab92186ddd7da255f83',NULL,1); +INSERT INTO script_keys VALUES(13,25,X'027c79b9b26e463895eef5679d8558942c86c4ad2233adef01bc3e6d540b3653fe',NULL,4); +INSERT INTO script_keys VALUES(14,28,X'0259abecb6a3b011da764e85fbfb6ffe9a6f2b259edd7432178c3d0f03e33c2fac',NULL,3); +INSERT INTO script_keys VALUES(15,30,X'0227c963c1bb63aec2f0b4928ae2688b2fd033c7561090b8c33f3afbbbb3eb37ad',NULL,1); +INSERT INTO script_keys VALUES(16,32,X'0264718024b9f684cf1318d0c84023ca96ffbee507b06a0cc09d92ccdd6d837c68',NULL,3); +INSERT INTO script_keys VALUES(17,34,X'02c56b5d678fb2c7093d8750c742b396ac36a296b2b01d5822d234d97adb8fccc7',NULL,1); +INSERT INTO script_keys VALUES(18,36,X'02d068d49a22ad4169b3b1da01e7e43bcf78683cb8318c7e8f6e821544063490e4',NULL,3); +INSERT INTO script_keys VALUES(19,39,X'025792fcd2ce6fc13c7bdc135b03558df1a3a7929f37f592446808a50f69b4163e',NULL,3); + +INSERT INTO assets VALUES(1,2,1,3,2,0,5000,0,0,NULL,NULL,10,true); +INSERT INTO assets VALUES(2,1,0,4,1,0,1,0,0,NULL,NULL,14,true); +INSERT INTO assets VALUES(3,3,1,2,NULL,0,1,0,0,NULL,NULL,2,true); +INSERT INTO assets VALUES(4,4,0,1,NULL,0,5000,0,0,NULL,NULL,1,true); +INSERT INTO assets VALUES(5,4,0,9,NULL,0,300,0,0,NULL,NULL,16,false); +INSERT INTO assets VALUES(6,4,0,5,NULL,0,1100,0,0,NULL,NULL,12,false); +INSERT INTO assets VALUES(7,4,0,6,NULL,0,1200,0,0,NULL,NULL,3,true); +INSERT INTO assets VALUES(8,4,0,7,NULL,0,1600,0,0,NULL,NULL,4,true); +INSERT INTO assets VALUES(9,4,0,8,NULL,0,800,0,0,NULL,NULL,5,false); +INSERT INTO assets VALUES(10,4,0,10,NULL,0,1500,0,0,X'0f5f88803ed86bbb6a1ebd50beb7e1836791d5c50ac26d79e9b94d6e3a649954',1600,6,true); +INSERT INTO assets VALUES(11,4,0,11,NULL,0,100,0,0,NULL,NULL,7,true); +INSERT INTO assets VALUES(12,4,0,13,NULL,0,0,0,0,X'ce3eb592a1004a1c9e7f4ffc4d8f788a14081815794c95144491e2ecf3f2f3d8',1500,8,true); +INSERT INTO assets VALUES(13,4,0,12,NULL,0,1500,0,0,NULL,NULL,9,true); +INSERT INTO assets VALUES(14,3,1,14,NULL,0,1,0,0,NULL,NULL,11,true); +INSERT INTO assets VALUES(15,4,0,15,NULL,0,300,0,0,X'86f0901850e42f6c670cbf4290432e0f5b0de0cbd2b8fb24120a2ce6cfea757e',2700,12,false); +INSERT INTO assets VALUES(16,4,0,16,NULL,0,2400,0,0,NULL,NULL,13,true); +INSERT INTO assets VALUES(17,2,0,17,2,0,4900,0,0,NULL,NULL,16,false); +INSERT INTO assets VALUES(18,2,1,18,2,0,100,0,0,NULL,NULL,15,true); +INSERT INTO assets VALUES(19,1,0,19,1,0,1,0,0,NULL,NULL,17,true); + +INSERT INTO asset_witnesses VALUES(3,7,X'000000000000000000000000000000000000000000000000000000000000000000000000',X'0000000000000000000000000000000000000000000000000000000000000000',X'000000000000000000000000000000000000000000000000000000000000000000',NULL,X'4a0001eada320d79476f172d27b7a4e42dd9cf42f2a99a9bf160aacadd6a7f4e69f9ab0000000000000ed8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd016000010002531669f2132bab2f14e0093b8c1cf00b7d182621d8f2d456eb1554aa84d1d22b6d0000000009697465737462757878811ad3c42f355c915d1fc4ba4ed71337092191431308f975d7acbc88a09ab98100000000000401000603fd012c0bad01ab01658e279a78f8ca1e80d691599d7cdedf20c0eacab100765366b9695ed3ac5d376b00000000c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a330294537c86db5031f455a60fb897b5afd7f7d0926a86b57a818f6178bde1e4eb8b03420140b7f87380130b50c72845429b0d4579303c470bfbd7f9839d4d1c17519b137f404e5e060d44cf23e4a5e403a074bf020bd98ac04097fee4e7e2aa1aed0e196ad00d2863a219d9e362b625b805bd5e444c3577d140cf3cd8fb3e65bb79614e9e5f928200000000000013880e0200001021024e97d867b61a98d410ec2ed4592c605f88feb58b16c793fc95dd8388ffaaf662',0); +INSERT INTO asset_witnesses VALUES(4,8,X'000000000000000000000000000000000000000000000000000000000000000000000000',X'0000000000000000000000000000000000000000000000000000000000000000',X'000000000000000000000000000000000000000000000000000000000000000000',NULL,X'9a0003ad2c06ac08f6caad523f3bc88681000ce544affe47e233a799cc343d425230dd000000000000032099bd852d58f1f6cd0dfdb427483dc14a2bb1df10f958b030f85fe50a1915a5780000000000000578e5ab149a758bcbafc640827d47a162049bcffcd9ef23aa02a6a9ec601119661800000000000004b0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4ffd016000010002531669f2132bab2f14e0093b8c1cf00b7d182621d8f2d456eb1554aa84d1d22b6d0000000009697465737462757878811ad3c42f355c915d1fc4ba4ed71337092191431308f975d7acbc88a09ab98100000000000401000603fd012c0bad01ab01658e279a78f8ca1e80d691599d7cdedf20c0eacab100765366b9695ed3ac5d376b00000000c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a330294537c86db5031f455a60fb897b5afd7f7d0926a86b57a818f6178bde1e4eb8b03420140b7f87380130b50c72845429b0d4579303c470bfbd7f9839d4d1c17519b137f404e5e060d44cf23e4a5e403a074bf020bd98ac04097fee4e7e2aa1aed0e196ad00d2863a219d9e362b625b805bd5e444c3577d140cf3cd8fb3e65bb79614e9e5f928200000000000013880e0200001021024e97d867b61a98d410ec2ed4592c605f88feb58b16c793fc95dd8388ffaaf662',0); +INSERT INTO asset_witnesses VALUES(5,9,X'000000000000000000000000000000000000000000000000000000000000000000000000',X'0000000000000000000000000000000000000000000000000000000000000000',X'000000000000000000000000000000000000000000000000000000000000000000',NULL,X'9a0003f5c8372d3904ba4aab1e78890f18c20e3b8bb0a43be96b4f556e02ab09ab0a32000000000000064099bd852d58f1f6cd0dfdb427483dc14a2bb1df10f958b030f85fe50a1915a5780000000000000578e5ab149a758bcbafc640827d47a162049bcffcd9ef23aa02a6a9ec601119661800000000000004b0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4ffd016000010002531669f2132bab2f14e0093b8c1cf00b7d182621d8f2d456eb1554aa84d1d22b6d0000000009697465737462757878811ad3c42f355c915d1fc4ba4ed71337092191431308f975d7acbc88a09ab98100000000000401000603fd012c0bad01ab01658e279a78f8ca1e80d691599d7cdedf20c0eacab100765366b9695ed3ac5d376b00000000c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a330294537c86db5031f455a60fb897b5afd7f7d0926a86b57a818f6178bde1e4eb8b03420140b7f87380130b50c72845429b0d4579303c470bfbd7f9839d4d1c17519b137f404e5e060d44cf23e4a5e403a074bf020bd98ac04097fee4e7e2aa1aed0e196ad00d2863a219d9e362b625b805bd5e444c3577d140cf3cd8fb3e65bb79614e9e5f928200000000000013880e0200001021024e97d867b61a98d410ec2ed4592c605f88feb58b16c793fc95dd8388ffaaf662',0); +INSERT INTO asset_witnesses VALUES(8,3,X'8e279a78f8ca1e80d691599d7cdedf20c0eacab100765366b9695ed3ac5d376b00000000',X'be69ada08113cd096655305d1f66f964981c32871d9c7b17165cf060b781913e',X'02711e2375719883c616994511b16ec9b72310301b31987541c35533997fdc4897',X'0140ff78fe79b5fa63a54cc76204e11c1193b4e57167cdb62896d7a5821ec6cdcaab17b26a83bb6c6ea1541e79bae9e5797b765ec129ca9d47ca038d9614f735b952',NULL,0); +INSERT INTO asset_witnesses VALUES(9,10,X'6bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520101000000',X'c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a33',X'026a3175d26ed8d733f727f9de5623e6a2b319e1db2d8084b2479572fb2b4f7f54',X'01408e8bd0949fc8dbdec14e2f0a667720116c36222e697af8a6a82a6ecc9aad33edb14763a584da7386f77a1bf375cb8cfd478e023b3a7ab12811692ed41a93d3a5',NULL,0); +INSERT INTO asset_witnesses VALUES(10,11,X'000000000000000000000000000000000000000000000000000000000000000000000000',X'0000000000000000000000000000000000000000000000000000000000000000',X'000000000000000000000000000000000000000000000000000000000000000000',NULL,X'4a00017e48608e6af39c6dd751baea3d22307dc38cb2ce577f1705833a910692fcd72c00000000000005dcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffd016000010002531669f2132bab2f14e0093b8c1cf00b7d182621d8f2d456eb1554aa84d1d22b6d0000000009697465737462757878811ad3c42f355c915d1fc4ba4ed71337092191431308f975d7acbc88a09ab98100000000000401000603fd05dc0bad01ab01656bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520100000001c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a33026a3175d26ed8d733f727f9de5623e6a2b319e1db2d8084b2479572fb2b4f7f54034201408e8bd0949fc8dbdec14e2f0a667720116c36222e697af8a6a82a6ecc9aad33edb14763a584da7386f77a1bf375cb8cfd478e023b3a7ab12811692ed41a93d3a50d280f5f88803ed86bbb6a1ebd50beb7e1836791d5c50ac26d79e9b94d6e3a64995400000000000006400e020000102102985680060084b80cce6ad2c1240483f6e4e056cbc4e0652e8e92dab9bf6323b4',0); +INSERT INTO asset_witnesses VALUES(11,12,X'07e55c1c48ae772d359116a25bd925fe48f0a8158048a76da82168a0a51994b301000000',X'c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a33',X'02985680060084b80cce6ad2c1240483f6e4e056cbc4e0652e8e92dab9bf6323b4',X'01405df047bf1415ec1082938c03a31a6121e22d2b5a24fd82eb38031e7f1a1bc7cb43df8185e8916539097e7c0dd4c73578e2c9782d539209e45797402f19a5c407',NULL,0); +INSERT INTO asset_witnesses VALUES(12,13,X'000000000000000000000000000000000000000000000000000000000000000000000000',X'0000000000000000000000000000000000000000000000000000000000000000',X'000000000000000000000000000000000000000000000000000000000000000000',NULL,X'4a000179dcc364d7884f927f686a174f3e14d2fd3b35a98f53a1a0a625e4c826d743590000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffd015e00010002531669f2132bab2f14e0093b8c1cf00b7d182621d8f2d456eb1554aa84d1d22b6d0000000009697465737462757878811ad3c42f355c915d1fc4ba4ed71337092191431308f975d7acbc88a09ab98100000000000401000601000bad01ab016507e55c1c48ae772d359116a25bd925fe48f0a8158048a76da82168a0a51994b300000001c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a3302985680060084b80cce6ad2c1240483f6e4e056cbc4e0652e8e92dab9bf6323b4034201405df047bf1415ec1082938c03a31a6121e22d2b5a24fd82eb38031e7f1a1bc7cb43df8185e8916539097e7c0dd4c73578e2c9782d539209e45797402f19a5c4070d28ce3eb592a1004a1c9e7f4ffc4d8f788a14081815794c95144491e2ecf3f2f3d800000000000005dc0e0200001021027c79b9b26e463895eef5679d8558942c86c4ad2233adef01bc3e6d540b3653fe',0); +INSERT INTO asset_witnesses VALUES(13,14,X'6bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520103000000',X'be69ada08113cd096655305d1f66f964981c32871d9c7b17165cf060b781913e',X'02711e2375719883c616994511b16ec9b72310301b31987541c35533997fdc4897',X'0140e0e3dd6df4c3fa3de8dfa71f3df4327a60bbd8456de5cccff8af8b37b8ab3555a83ac00c7f87a09440a3ce96cbf8bf71976dd34bcf7efba78699123b57d1885e',NULL,0); +INSERT INTO asset_witnesses VALUES(14,1,X'6bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520103000000',X'5c402b7f5e62dd5a0e401958396874c4dc6d02f8e90b5735678837f3232f3fc9',X'0249af52a0cb7e468fb347a312759d4a2ed59708462f66f27b1b6420a475e09d2c',X'014010af0526ddb36aa01b023bf7dd847192712b10dda435132f852bc1a5980d6525635fda9f99cb8379bde3608a517b9d54ab7cd35a708a729b662de5113b9524be',NULL,0); +INSERT INTO asset_witnesses VALUES(17,15,X'a4cb249a91a848ef97a44fe94d1903e82ba22a4e934fdc31aedc83877e61068e01000000',X'c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a33',X'0240f1c105c00e8ac6fad2d9669665d3b66b80c7798c26bab92186ddd7da255f83',X'0140df45fdbbb2ba2170d95edc23128b800da528b015a54184d6d1661bbbb0a1f813c002d8d30c8f7198a913bd0a9af80906d6a8943303b93392637d61b4ab41c185',NULL,0); +INSERT INTO asset_witnesses VALUES(18,15,X'6bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520100000000',X'c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a33',X'026d6b3e98afe5c4a67c2dc63b61e9b293375bb98c71e13520691215db3d810d9c',X'01407a86f416fe784170d4316d56255e9f53dada3e86949d94ec230ef99f2f55dd086842d374cb0413235ad692f0153d9b03af27f83fbc78ef50b23a1e310f1f8a10',NULL,1); +INSERT INTO asset_witnesses VALUES(19,16,X'000000000000000000000000000000000000000000000000000000000000000000000000',X'0000000000000000000000000000000000000000000000000000000000000000',X'000000000000000000000000000000000000000000000000000000000000000000',NULL,X'4a000110298dc79ede4a8b6528e5cc1df16ad12253db2e40b8ad22014d915f99f12d41000000000000012cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ffd020e00010002531669f2132bab2f14e0093b8c1cf00b7d182621d8f2d456eb1554aa84d1d22b6d0000000009697465737462757878811ad3c42f355c915d1fc4ba4ed71337092191431308f975d7acbc88a09ab98100000000000401000603fd012c0bfd015902ab0165a4cb249a91a848ef97a44fe94d1903e82ba22a4e934fdc31aedc83877e61068e00000001c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a330240f1c105c00e8ac6fad2d9669665d3b66b80c7798c26bab92186ddd7da255f8303420140df45fdbbb2ba2170d95edc23128b800da528b015a54184d6d1661bbbb0a1f813c002d8d30c8f7198a913bd0a9af80906d6a8943303b93392637d61b4ab41c185ab01656bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520100000000c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a33026d6b3e98afe5c4a67c2dc63b61e9b293375bb98c71e13520691215db3d810d9c034201407a86f416fe784170d4316d56255e9f53dada3e86949d94ec230ef99f2f55dd086842d374cb0413235ad692f0153d9b03af27f83fbc78ef50b23a1e310f1f8a100d2886f0901850e42f6c670cbf4290432e0f5b0de0cbd2b8fb24120a2ce6cfea757e0000000000000a8c0e02000010210227c963c1bb63aec2f0b4928ae2688b2fd033c7561090b8c33f3afbbbb3eb37ad',0); +INSERT INTO asset_witnesses VALUES(20,6,X'6bd8dd229d604db12ef3a4cb68877751b56ad13108415a51d318de945c08520100000000',X'c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a33',X'027938965111c8f1829040ebea82df815f888040e2af6a1f2047f3b74b994ba941',X'0140560c50cf41356cc80d410f9a00c92ebda7ea625bd851d24c18c824113f672f3fef6e9f746ed879ba31eb00903d00bbd4383181d86e2986d9dabc4158ba0923b5',NULL,0); +INSERT INTO asset_witnesses VALUES(22,18,X'000000000000000000000000000000000000000000000000000000000000000000000000',X'0000000000000000000000000000000000000000000000000000000000000000',X'000000000000000000000000000000000000000000000000000000000000000000',NULL,X'4a0001702700d853e65b29ef61e7cb1e8a9ecb8d8b5d17b85419d91ce9a1d5957601730000000000001324ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbffd019600010002661669f2132bab2f14e0093b8c1cf00b7d182621d8f2d456eb1554aa84d1d22b6d000000001c6974657374627578782d6d6f6e65792d7072696e7465722d62727272811ad3c42f355c915d1fc4ba4ed71337092191431308f975d7acbc88a09ab98100000000000401000603fd13240bad01ab01655660943edf2d9f1aec7ac6b1ff1dfa3d2a612a945c8161611cf2b5428f39cda3000000015c402b7f5e62dd5a0e401958396874c4dc6d02f8e90b5735678837f3232f3fc90249af52a0cb7e468fb347a312759d4a2ed59708462f66f27b1b6420a475e09d2c03420140f15fe214b01e758d9e5cb90fa815ae31a6391d4161bab60ac4e30ec5ea05c0a11445381238389a15e699780309e5689da8bfff5e74d77b15816df89ecf8c00620d28d20e77d0adf828e371d9070958ccbf892a6db24a9f018dd28fab1295ef0057fb00000000000013880e020000102102c56b5d678fb2c7093d8750c742b396ac36a296b2b01d5822d234d97adb8fccc7112102b68069216c382a091c6584955f42bb9be52bcae1fc6c0333208e89f9a861ebbc',0); +INSERT INTO asset_witnesses VALUES(24,2,X'5660943edf2d9f1aec7ac6b1ff1dfa3d2a612a945c8161611cf2b5428f39cda301000000',X'cc28ff8007b5876d6a49a9a1b5914193a0f2cdb343b8a73530ccf4a8cff005ed',X'02caae0e34c4ab29d4a1abb7e4ec4f2a47aa1e2cfc9e19eecf265313a06f90f091',X'0140241426a64a8e2466de7cc01802a0a7697978d9b60742496cd6a5d59d69c4e9b9fc23d0f39fb3c767569d43177ba9fb4cb41d59d8a30a7352c619b678fda60c53',NULL,0); +INSERT INTO asset_witnesses VALUES(25,19,X'd3b2b91e741b2ac1e0cc4b3daedb75d292c71ebccfe689a7ff55e4176debde6301000000',X'cc28ff8007b5876d6a49a9a1b5914193a0f2cdb343b8a73530ccf4a8cff005ed',X'02caae0e34c4ab29d4a1abb7e4ec4f2a47aa1e2cfc9e19eecf265313a06f90f091',X'0140f9504b4ce9d461fb8512c040dad11a3773ddd45b7df5b56b36289d941b2294940459a3b85831def5e36a321cd156887d730b4ff4fec10d5396eae2281b380229',NULL,0); +INSERT INTO asset_witnesses VALUES(26,17,X'd3b2b91e741b2ac1e0cc4b3daedb75d292c71ebccfe689a7ff55e4176debde6301000000',X'5c402b7f5e62dd5a0e401958396874c4dc6d02f8e90b5735678837f3232f3fc9',X'02c56b5d678fb2c7093d8750c742b396ac36a296b2b01d5822d234d97adb8fccc7',X'0140ba924fbdb6bdd71bee7b25b6340ff62778a937e8da4b9c51331c6e6a309bd7ff0c464726df22e69e5900e21b09d9b3bcaa7ce2bfd13244dc1071273d3f37946d',NULL,0); +INSERT INTO asset_witnesses VALUES(27,5,X'd3b2b91e741b2ac1e0cc4b3daedb75d292c71ebccfe689a7ff55e4176debde6301000000',X'c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a33',X'024e97d867b61a98d410ec2ed4592c605f88feb58b16c793fc95dd8388ffaaf662',X'014084e77abc0c569383b336e10c98b64abb833ab981e036586d0fd88f3380af7f40723c23358b3b8e8a0efe449493b94d25e49f1bf601ba50f751adb7f1e3dee115',NULL,0); + +INSERT INTO asset_transfers VALUES(1,440,2,'2025-06-19 17:36:20.694744862',NULL,false); +INSERT INTO asset_transfers VALUES(2,441,3,'2025-06-19 17:36:21.043473125',NULL,false); +INSERT INTO asset_transfers VALUES(3,442,4,'2025-06-19 17:36:21.577217391','1750347381540389722',false); +INSERT INTO asset_transfers VALUES(4,443,5,'2025-06-19 17:36:22.148695967',NULL,false); +INSERT INTO asset_transfers VALUES(5,444,6,'2025-06-19 17:36:22.470745086',NULL,false); +INSERT INTO asset_transfers VALUES(6,445,7,'2025-06-19 17:36:22.85192938',NULL,false); +INSERT INTO asset_transfers VALUES(7,446,8,'2025-06-19 17:36:23.369969094',NULL,false); + +-- We insert two of the five burned assets already, to make sure the comparison +-- works correctly. +INSERT INTO asset_burn_transfers VALUES(3,5,NULL,X'c891569827f53d16d5ddb6d99d4ae5cbd5e4d041fc6add35edc8bc5d091e1a33',NULL,2400); +INSERT INTO asset_burn_transfers VALUES(4,6,NULL,X'5c402b7f5e62dd5a0e401958396874c4dc6d02f8e90b5735678837f3232f3fc9',X'02b68069216c382a091c6584955f42bb9be52bcae1fc6c0333208e89f9a861ebbc',100); +INSERT INTO asset_burn_transfers VALUES(5,7,NULL,X'cc28ff8007b5876d6a49a9a1b5914193a0f2cdb343b8a73530ccf4a8cff005ed',X'03507c1e543a26a4cecd96bb62a5cd5b331023c089f3074bd3af961d997b37b52b',1);