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/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/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 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);