77 "sync"
88 "time"
99
10+ "github.com/btcsuite/btcd/btcec/v2"
1011 "github.com/davecgh/go-spew/spew"
1112 "github.com/lightninglabs/taproot-assets/address"
1213 "github.com/lightninglabs/taproot-assets/asset"
@@ -805,31 +806,42 @@ func (f *FederationEnvoy) tryFetchServers() ([]ServerAddr, error) {
805806}
806807
807808// SyncAssetInfo queries the universes in our federation for genesis and asset
808- // group information about the given asset ID .
809+ // group information about the given asset.
809810func (f * FederationEnvoy ) SyncAssetInfo (ctx context.Context ,
810- assetID * asset.ID ) error {
811+ specifier asset.Specifier ) error {
811812
812- if assetID == nil {
813- return fmt . Errorf ( "no asset ID provided" )
813+ uniID := Identifier {
814+ ProofType : ProofTypeIssuance ,
814815 }
815816
817+ // One of asset ID or group key must be set, but not both.
818+ if specifier .HasId () == specifier .HasGroupPubKey () {
819+ return fmt .Errorf ("must set either asset ID or group key for " +
820+ "asset sync" )
821+ }
822+
823+ specifier .WhenId (func (id asset.ID ) {
824+ uniID .AssetID = id
825+ })
826+ specifier .WhenGroupPubKey (func (groupKey btcec.PublicKey ) {
827+ uniID .GroupKey = & groupKey
828+ })
829+
816830 // Fetch the set of universe servers in our federation.
817831 fedServers , err := f .tryFetchServers ()
818832 if err != nil {
819833 return err
820834 }
821835
822836 assetConfig := FedUniSyncConfig {
823- UniverseID : Identifier {
824- AssetID : * assetID ,
825- ProofType : ProofTypeIssuance ,
826- },
837+ UniverseID : uniID ,
827838 AllowSyncInsert : true ,
828839 AllowSyncExport : false ,
829840 }
830841 fullConfig := SyncConfigs {
831842 UniSyncConfigs : []* FedUniSyncConfig {& assetConfig },
832843 }
844+
833845 // We'll sync with Universe servers in parallel and collect the diffs
834846 // from any successful syncs. There can only be one diff per server, as
835847 // we're only syncing one universe root.
@@ -846,8 +858,8 @@ func (f *FederationEnvoy) SyncAssetInfo(ctx context.Context,
846858 // Sync failures are expected from Universe servers that do not
847859 // have a relevant universe root.
848860 if err != nil {
849- log .Warnf ("Asset lookup failed: asset_id =%v, " +
850- "remote_server=%v: %v" , assetID .String (),
861+ log .Warnf ("Asset lookup failed: id =%v, " +
862+ "remote_server=%v: %v" , uniID .String (),
851863 addr .HostStr (), err )
852864
853865 // We don't want to abort syncing here, as this might
@@ -863,8 +875,8 @@ func (f *FederationEnvoy) SyncAssetInfo(ctx context.Context,
863875 if len (syncDiff ) != 1 {
864876 log .Warnf ("Unexpected number of sync diffs " +
865877 "when looking up asset: num_diffs=%d, " +
866- "asset_id =%v, remote_server=%v" ,
867- len (syncDiff ), assetID .String (),
878+ "id =%v, remote_server=%v" ,
879+ len (syncDiff ), uniID .String (),
868880 addr .HostStr ())
869881
870882 // We don't want to abort syncing here, as this
@@ -891,12 +903,11 @@ func (f *FederationEnvoy) SyncAssetInfo(ctx context.Context,
891903
892904 syncDiffs := fn .Collect (returnedSyncDiffs )
893905 log .Infof ("Synced new Universe leaves for asset %v, diff_size=%v" ,
894- assetID .String (), len (syncDiffs ))
906+ uniID .String (), len (syncDiffs ))
895907
896- // TODO(jhb): Log successful syncs?
897908 if len (syncDiffs ) == 0 {
898909 return fmt .Errorf ("asset lookup failed for asset: %v" ,
899- assetID .String ())
910+ uniID .String ())
900911 }
901912
902913 return nil
0 commit comments