mirror of
https://github.com/aljazceru/ark.git
synced 2025-12-17 04:04:21 +01:00
* [domain] add reverse boarding inputs in Payment struct * [tx-builder] support reverse boarding script * [wallet] add GetTransaction * [api-spec][application] add reverse boarding support in covenantless * [config] add reverse boarding config * [api-spec] add ReverseBoardingAddress RPC * [domain][application] support empty forfeits txs in EndFinalization events * [tx-builder] optional connector output in round tx * [btc-embedded] fix getTx and taproot finalizer * whitelist ReverseBoardingAddress RPC * [test] add reverse boarding integration test * [client] support reverse boarding * [sdk] support reverse boarding * [e2e] add sleep time after faucet * [test] run using bitcoin-core RPC * [tx-builder] fix GetSweepInput * [application][tx-builder] support reverse onboarding in covenant * [cli] support reverse onboarding in covenant CLI * [test] rework integration tests * [sdk] remove onchain wallet, replace by onboarding address * remove old onboarding protocols * [sdk] Fix RegisterPayment * [e2e] add more funds to covenant ASP * [e2e] add sleeping time * several fixes * descriptor boarding * remove boarding delay from info * [sdk] implement descriptor boarding * go mod tidy * fixes and revert error msgs * move descriptor pkg to common * add replace in go.mod * [sdk] fix unit tests * rename DescriptorInput --> BoardingInput * genrest in SDK * remove boarding input from domain * remove all "reverse boarding" * rename "onboarding" ==> "boarding" * remove outdate payment unit test * use tmpfs docker volument for compose testing files * several fixes
66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package common
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/btcsuite/btcd/btcutil/bech32"
|
|
"github.com/decred/dcrd/dcrec/secp256k1/v4"
|
|
)
|
|
|
|
func EncodeAddress(
|
|
hrp string, userKey, aspKey *secp256k1.PublicKey,
|
|
) (addr string, err error) {
|
|
if userKey == nil {
|
|
err = fmt.Errorf("missing public key")
|
|
return
|
|
}
|
|
if aspKey == nil {
|
|
err = fmt.Errorf("missing asp public key")
|
|
return
|
|
}
|
|
if hrp != Liquid.Addr && hrp != LiquidTestNet.Addr {
|
|
err = fmt.Errorf("invalid prefix")
|
|
return
|
|
}
|
|
combinedKey := append(
|
|
aspKey.SerializeCompressed(), userKey.SerializeCompressed()...,
|
|
)
|
|
grp, err := bech32.ConvertBits(combinedKey, 8, 5, true)
|
|
if err != nil {
|
|
return
|
|
}
|
|
addr, err = bech32.EncodeM(hrp, grp)
|
|
return
|
|
}
|
|
|
|
func DecodeAddress(
|
|
addr string,
|
|
) (hrp string, userKey, aspKey *secp256k1.PublicKey, err error) {
|
|
prefix, buf, err := bech32.DecodeNoLimit(addr)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if prefix != Liquid.Addr && prefix != LiquidTestNet.Addr && prefix != LiquidRegTest.Addr {
|
|
err = fmt.Errorf("invalid prefix")
|
|
return
|
|
}
|
|
grp, err := bech32.ConvertBits(buf, 5, 8, false)
|
|
if err != nil {
|
|
return
|
|
}
|
|
aKey, err := secp256k1.ParsePubKey(grp[:33])
|
|
if err != nil {
|
|
err = fmt.Errorf("failed to parse public key: %s", err)
|
|
return
|
|
}
|
|
uKey, err := secp256k1.ParsePubKey(grp[33:])
|
|
if err != nil {
|
|
err = fmt.Errorf("failed to parse asp public key: %s", err)
|
|
return
|
|
}
|
|
hrp = prefix
|
|
userKey = uKey
|
|
aspKey = aKey
|
|
return
|
|
}
|