mirror of
https://github.com/muun/recovery.git
synced 2025-02-23 03:22:31 -05:00
85 lines
2.4 KiB
Go
85 lines
2.4 KiB
Go
package libwallet
|
|
|
|
import (
|
|
"github.com/muun/libwallet/addresses"
|
|
"github.com/muun/libwallet/swaps"
|
|
)
|
|
|
|
type SubmarineSwap interface {
|
|
Invoice() string
|
|
Receiver() SubmarineSwapReceiver
|
|
FundingOutput() SubmarineSwapFundingOutput
|
|
|
|
PreimageInHex() string
|
|
}
|
|
|
|
type SubmarineSwapReceiver interface {
|
|
Alias() string
|
|
PublicKey() string
|
|
}
|
|
|
|
type SubmarineSwapFundingOutput interface {
|
|
ScriptVersion() int64
|
|
|
|
OutputAddress() string
|
|
OutputAmount() int64
|
|
ConfirmationsNeeded() int
|
|
ServerPaymentHashInHex() string
|
|
ServerPublicKeyInHex() string
|
|
|
|
UserLockTime() int64
|
|
|
|
// v1 only
|
|
UserRefundAddress() MuunAddress
|
|
|
|
// v2 only
|
|
ExpirationInBlocks() int64
|
|
UserPublicKey() *HDPublicKey
|
|
MuunPublicKey() *HDPublicKey
|
|
}
|
|
|
|
func ValidateSubmarineSwap(rawInvoice string, userPublicKey *HDPublicKey, muunPublicKey *HDPublicKey, swap SubmarineSwap, originalExpirationInBlocks int64, network *Network) error {
|
|
data := swaps.SubmarineSwap{
|
|
Invoice: swap.Invoice(),
|
|
Receiver: swaps.SubmarineSwapReceiver{
|
|
Alias: swap.Receiver().Alias(),
|
|
PublicKey: swap.Receiver().PublicKey(),
|
|
},
|
|
FundingOutput: createSwapFundingOutput(swap.FundingOutput()),
|
|
PreimageInHex: swap.PreimageInHex(),
|
|
}
|
|
return data.Validate(
|
|
rawInvoice,
|
|
&swaps.KeyDescriptor{Key: &userPublicKey.key, Path: userPublicKey.Path},
|
|
&swaps.KeyDescriptor{Key: &muunPublicKey.key, Path: muunPublicKey.Path},
|
|
originalExpirationInBlocks,
|
|
network.network,
|
|
)
|
|
}
|
|
|
|
func createSwapFundingOutput(output SubmarineSwapFundingOutput) swaps.SubmarineSwapFundingOutput {
|
|
out := swaps.SubmarineSwapFundingOutput{
|
|
ScriptVersion: output.ScriptVersion(),
|
|
OutputAddress: output.OutputAddress(),
|
|
OutputAmount: output.OutputAmount(),
|
|
ConfirmationsNeeded: output.ConfirmationsNeeded(),
|
|
ServerPaymentHashInHex: output.ServerPaymentHashInHex(),
|
|
ServerPublicKeyInHex: output.ServerPublicKeyInHex(),
|
|
UserLockTime: output.UserLockTime(),
|
|
}
|
|
switch out.ScriptVersion {
|
|
case AddressVersionSwapsV1:
|
|
out.UserRefundAddress = addresses.New(
|
|
output.UserRefundAddress().Version(),
|
|
output.UserRefundAddress().DerivationPath(),
|
|
output.UserRefundAddress().Address(),
|
|
)
|
|
case AddressVersionSwapsV2:
|
|
out.ExpirationInBlocks = output.ExpirationInBlocks()
|
|
out.UserPublicKey = &output.UserPublicKey().key
|
|
out.MuunPublicKey = &output.MuunPublicKey().key
|
|
out.KeyPath = output.UserPublicKey().Path
|
|
}
|
|
return out
|
|
}
|