mirror of
https://github.com/muun/recovery.git
synced 2025-11-09 05:34:57 -05:00
Release v0.3.0
This commit is contained in:
59
vendor/github.com/muun/libwallet/addresses/addresses.go
generated
vendored
Normal file
59
vendor/github.com/muun/libwallet/addresses/addresses.go
generated
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
package addresses
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcutil/hdkeychain"
|
||||
)
|
||||
|
||||
const (
|
||||
V1 = 1
|
||||
V2 = 2
|
||||
V3 = 3
|
||||
V4 = 4
|
||||
SubmarineSwapV1 = 101
|
||||
SubmarineSwapV2 = 102
|
||||
IncomingSwap = 201
|
||||
)
|
||||
|
||||
type WalletAddress struct {
|
||||
version int
|
||||
derivationPath string
|
||||
address string
|
||||
}
|
||||
|
||||
func New(version int, derivationPath string, address string) *WalletAddress {
|
||||
return &WalletAddress{
|
||||
version: version,
|
||||
derivationPath: derivationPath,
|
||||
address: address,
|
||||
}
|
||||
}
|
||||
|
||||
func Create(version int, userKey, muunKey *hdkeychain.ExtendedKey, path string, network *chaincfg.Params) (*WalletAddress, error) {
|
||||
switch version {
|
||||
case V1:
|
||||
return CreateAddressV1(userKey, path, network)
|
||||
case V2:
|
||||
return CreateAddressV2(userKey, muunKey, path, network)
|
||||
case V3:
|
||||
return CreateAddressV3(userKey, muunKey, path, network)
|
||||
case V4:
|
||||
return CreateAddressV4(userKey, muunKey, path, network)
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown or unsupported version %v", version)
|
||||
}
|
||||
}
|
||||
|
||||
func (a *WalletAddress) Version() int {
|
||||
return a.version
|
||||
}
|
||||
|
||||
func (a *WalletAddress) DerivationPath() string {
|
||||
return a.derivationPath
|
||||
}
|
||||
|
||||
func (a *WalletAddress) Address() string {
|
||||
return a.address
|
||||
}
|
||||
24
vendor/github.com/muun/libwallet/addresses/v1.go
generated
vendored
Normal file
24
vendor/github.com/muun/libwallet/addresses/v1.go
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
package addresses
|
||||
|
||||
import (
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcutil/hdkeychain"
|
||||
)
|
||||
|
||||
// CreateAddressV1 returns a P2PKH WalletAddress from a publicKey for use in TransactionSchemeV1
|
||||
func CreateAddressV1(userKey *hdkeychain.ExtendedKey, path string, network *chaincfg.Params) (*WalletAddress, error) {
|
||||
pubKey, err := userKey.ECPubKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
address, err := btcutil.NewAddressPubKey(pubKey.SerializeCompressed(), network)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &WalletAddress{
|
||||
address: address.EncodeAddress(),
|
||||
version: V1,
|
||||
derivationPath: path,
|
||||
}, nil
|
||||
}
|
||||
57
vendor/github.com/muun/libwallet/addresses/v2.go
generated
vendored
Normal file
57
vendor/github.com/muun/libwallet/addresses/v2.go
generated
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
package addresses
|
||||
|
||||
import (
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcd/txscript"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcutil/hdkeychain"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func CreateAddressV2(userKey, muunKey *hdkeychain.ExtendedKey, path string, network *chaincfg.Params) (*WalletAddress, error) {
|
||||
|
||||
script, err := CreateRedeemScriptV2(userKey, muunKey, network)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to generate redeem script v2")
|
||||
}
|
||||
|
||||
address, err := btcutil.NewAddressScriptHash(script, network)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to generate multisig address")
|
||||
}
|
||||
|
||||
return &WalletAddress{
|
||||
address: address.EncodeAddress(),
|
||||
version: V2,
|
||||
derivationPath: path,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func CreateRedeemScriptV2(userKey, muunKey *hdkeychain.ExtendedKey, network *chaincfg.Params) ([]byte, error) {
|
||||
return createMultisigRedeemScript(userKey, muunKey, network)
|
||||
}
|
||||
|
||||
func createMultisigRedeemScript(userKey, muunKey *hdkeychain.ExtendedKey, network *chaincfg.Params) ([]byte, error) {
|
||||
userPublicKey, err := userKey.ECPubKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
userAddress, err := btcutil.NewAddressPubKey(userPublicKey.SerializeCompressed(), network)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to generate address for user")
|
||||
}
|
||||
|
||||
muunPublicKey, err := muunKey.ECPubKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
WalletAddress, err := btcutil.NewAddressPubKey(muunPublicKey.SerializeCompressed(), network)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to generate address for muun")
|
||||
}
|
||||
|
||||
return txscript.MultiSigScript([]*btcutil.AddressPubKey{
|
||||
userAddress,
|
||||
WalletAddress,
|
||||
}, 2)
|
||||
}
|
||||
55
vendor/github.com/muun/libwallet/addresses/v3.go
generated
vendored
Normal file
55
vendor/github.com/muun/libwallet/addresses/v3.go
generated
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
package addresses
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
|
||||
"github.com/btcsuite/btcd/txscript"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcutil/hdkeychain"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func CreateAddressV3(userKey, muunKey *hdkeychain.ExtendedKey, path string, network *chaincfg.Params) (*WalletAddress, error) {
|
||||
|
||||
redeemScript, err := CreateRedeemScriptV3(userKey, muunKey, network)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
address, err := btcutil.NewAddressScriptHash(redeemScript, network)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &WalletAddress{
|
||||
address: address.EncodeAddress(),
|
||||
version: V3,
|
||||
derivationPath: path,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func CreateRedeemScriptV3(userKey, muunKey *hdkeychain.ExtendedKey, network *chaincfg.Params) ([]byte, error) {
|
||||
witnessScript, err := CreateWitnessScriptV3(userKey, muunKey, network)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to generate redeem script v3")
|
||||
}
|
||||
|
||||
return createNonNativeSegwitRedeemScript(witnessScript)
|
||||
}
|
||||
|
||||
func CreateWitnessScriptV3(userKey, muunKey *hdkeychain.ExtendedKey, network *chaincfg.Params) ([]byte, error) {
|
||||
// createMultisigRedeemScript creates a valid script for both V2 and V3 schemes
|
||||
return createMultisigRedeemScript(userKey, muunKey, network)
|
||||
}
|
||||
|
||||
func createNonNativeSegwitRedeemScript(witnessScript []byte) ([]byte, error) {
|
||||
witnessScriptHash := sha256.Sum256(witnessScript)
|
||||
|
||||
builder := txscript.NewScriptBuilder()
|
||||
builder.AddInt64(0)
|
||||
builder.AddData(witnessScriptHash[:])
|
||||
|
||||
return builder.Script()
|
||||
}
|
||||
36
vendor/github.com/muun/libwallet/addresses/v4.go
generated
vendored
Normal file
36
vendor/github.com/muun/libwallet/addresses/v4.go
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
package addresses
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/btcsuite/btcutil/hdkeychain"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// CreateAddressV4 returns a P2WSH WalletAddress from a user HD-pubkey and a Muun co-signing HD-pubkey.
|
||||
func CreateAddressV4(userKey, muunKey *hdkeychain.ExtendedKey, path string, network *chaincfg.Params) (*WalletAddress, error) {
|
||||
|
||||
witnessScript, err := CreateWitnessScriptV4(userKey, muunKey, network)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to generate witness script v4")
|
||||
}
|
||||
witnessScript256 := sha256.Sum256(witnessScript)
|
||||
|
||||
address, err := btcutil.NewAddressWitnessScriptHash(witnessScript256[:], network)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &WalletAddress{
|
||||
address: address.EncodeAddress(),
|
||||
version: V4,
|
||||
derivationPath: path,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func CreateWitnessScriptV4(userKey, muunKey *hdkeychain.ExtendedKey, network *chaincfg.Params) ([]byte, error) {
|
||||
// createMultisigRedeemScript creates a valid script for V2, V3 and V4 schemes
|
||||
return createMultisigRedeemScript(userKey, muunKey, network)
|
||||
}
|
||||
Reference in New Issue
Block a user