Release v0.3.0

This commit is contained in:
Manu Herrera
2020-11-09 10:05:29 -03:00
parent 4e9aa7a3c5
commit 8107c4478b
1265 changed files with 440488 additions and 107809 deletions

View 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
View 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
View 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
View 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
View 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)
}