|  | 
| 7 | 7 | 	"errors" | 
| 8 | 8 | 	"fmt" | 
| 9 | 9 | 	"os" | 
|  | 10 | +	"path/filepath" | 
| 10 | 11 | 	"regexp" | 
| 11 | 12 | 	"time" | 
| 12 | 13 | 
 | 
| @@ -122,30 +123,13 @@ func (c *rescueClosedCommand) Execute(_ *cobra.Command, _ []string) error { | 
| 122 | 123 | 		return fmt.Errorf("error reading root key: %w", err) | 
| 123 | 124 | 	} | 
| 124 | 125 | 
 | 
|  | 126 | +	cmdErr := errors.New("you either need to specify --channeldb and " + | 
|  | 127 | +		"--fromsummary or --force_close_addr and " + | 
|  | 128 | +		"--commit_point but not a mixture of them") | 
|  | 129 | + | 
| 125 | 130 | 	// What way of recovery has the user chosen? From summary and DB or from | 
| 126 | 131 | 	// address and commit point? | 
| 127 | 132 | 	switch { | 
| 128 |  | -	case c.ChannelDB != "": | 
| 129 |  | -		db, err := lnd.OpenDB(c.ChannelDB, true) | 
| 130 |  | -		if err != nil { | 
| 131 |  | -			return fmt.Errorf("error opening rescue DB: %w", err) | 
| 132 |  | -		} | 
| 133 |  | - | 
| 134 |  | -		// Parse channel entries from any of the possible input files. | 
| 135 |  | -		entries, err := c.inputs.parseInputType() | 
| 136 |  | -		if err != nil { | 
| 137 |  | -			return err | 
| 138 |  | -		} | 
| 139 |  | - | 
| 140 |  | -		commitPoints, err := commitPointsFromDB(db.ChannelStateDB()) | 
| 141 |  | -		if err != nil { | 
| 142 |  | -			return fmt.Errorf("error reading commit points from "+ | 
| 143 |  | -				"db: %w", err) | 
| 144 |  | -		} | 
| 145 |  | -		return rescueClosedChannels( | 
| 146 |  | -			c.NumKeys, extendedKey, entries, commitPoints, | 
| 147 |  | -		) | 
| 148 |  | - | 
| 149 | 133 | 	case c.Addr != "": | 
| 150 | 134 | 		// First parse address to get targetPubKeyHash from it later. | 
| 151 | 135 | 		targetAddr, err := btcutil.DecodeAddress(c.Addr, chainParams) | 
| @@ -185,9 +169,39 @@ func (c *rescueClosedCommand) Execute(_ *cobra.Command, _ []string) error { | 
| 185 | 169 | 		) | 
| 186 | 170 | 
 | 
| 187 | 171 | 	default: | 
| 188 |  | -		return errors.New("you either need to specify --channeldb and " + | 
| 189 |  | -			"--fromsummary or --force_close_addr and " + | 
| 190 |  | -			"--commit_point but not a mixture of them") | 
|  | 172 | +		var opts []lnd.DBOption | 
|  | 173 | + | 
|  | 174 | +		// In case the channel DB is specified, we get the graph dir | 
|  | 175 | +		// from it. | 
|  | 176 | +		if c.ChannelDB != "" { | 
|  | 177 | +			graphDir := filepath.Dir(c.ChannelDB) | 
|  | 178 | +			opts = append(opts, lnd.WithCustomGraphDir(graphDir)) | 
|  | 179 | +		} | 
|  | 180 | + | 
|  | 181 | +		dbConfig := GetDBConfig() | 
|  | 182 | + | 
|  | 183 | +		db, err := lnd.OpenChannelDB( | 
|  | 184 | +			dbConfig, chainParams.Name, opts..., | 
|  | 185 | +		) | 
|  | 186 | +		if err != nil { | 
|  | 187 | +			return fmt.Errorf("error opening rescue DB: %w, %v", | 
|  | 188 | +				err, cmdErr) | 
|  | 189 | +		} | 
|  | 190 | + | 
|  | 191 | +		// Parse channel entries from any of the possible input files. | 
|  | 192 | +		entries, err := c.inputs.parseInputType() | 
|  | 193 | +		if err != nil { | 
|  | 194 | +			return err | 
|  | 195 | +		} | 
|  | 196 | + | 
|  | 197 | +		commitPoints, err := commitPointsFromDB(db.ChannelStateDB()) | 
|  | 198 | +		if err != nil { | 
|  | 199 | +			return fmt.Errorf("error reading commit points from "+ | 
|  | 200 | +				"db: %w", err) | 
|  | 201 | +		} | 
|  | 202 | +		return rescueClosedChannels( | 
|  | 203 | +			c.NumKeys, extendedKey, entries, commitPoints, | 
|  | 204 | +		) | 
| 191 | 205 | 	} | 
| 192 | 206 | } | 
| 193 | 207 | 
 | 
|  | 
0 commit comments