mirror of
https://github.com/aljazceru/ark.git
synced 2026-01-18 03:04:21 +01:00
New boarding protocol (#279)
* [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
This commit is contained in:
@@ -17,6 +17,7 @@ import (
|
||||
const (
|
||||
composePath = "../../../../docker-compose.regtest.yml"
|
||||
ONE_BTC = 1_0000_0000
|
||||
redeemAddr = "ert1p7hffs7y50jy8l34g334yke9cntzahml40xm2hx90g34jq8mqu7zsezhwcc"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
@@ -26,6 +27,8 @@ func TestMain(m *testing.M) {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
fmt.Println("waiting for docker containers to start...")
|
||||
|
||||
time.Sleep(10 * time.Second)
|
||||
|
||||
if err := setupAspWallet(); err != nil {
|
||||
@@ -41,26 +44,6 @@ func TestMain(m *testing.M) {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
var receive utils.ArkReceive
|
||||
receiveStr, err := runArkCommand("receive")
|
||||
if err != nil {
|
||||
fmt.Printf("error getting ark receive addresses: %s", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := json.Unmarshal([]byte(receiveStr), &receive); err != nil {
|
||||
fmt.Printf("error unmarshalling ark receive addresses: %s", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
_, err = utils.RunCommand("nigiri", "faucet", "--liquid", receive.Onchain)
|
||||
if err != nil {
|
||||
fmt.Printf("error funding ark account: %s", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
code := m.Run()
|
||||
|
||||
_, err = utils.RunCommand("docker", "compose", "-f", composePath, "down")
|
||||
@@ -71,37 +54,23 @@ func TestMain(m *testing.M) {
|
||||
os.Exit(code)
|
||||
}
|
||||
|
||||
func TestOnboard(t *testing.T) {
|
||||
var balance utils.ArkBalance
|
||||
balanceStr, err := runArkCommand("balance")
|
||||
require.NoError(t, err)
|
||||
|
||||
require.NoError(t, json.Unmarshal([]byte(balanceStr), &balance))
|
||||
balanceBefore := balance.Offchain.Total
|
||||
|
||||
_, err = runArkCommand("onboard", "--amount", "1000", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
err = utils.GenerateBlock()
|
||||
require.NoError(t, err)
|
||||
|
||||
balanceStr, err = runArkCommand("balance")
|
||||
require.NoError(t, err)
|
||||
|
||||
require.NoError(t, json.Unmarshal([]byte(balanceStr), &balance))
|
||||
require.Equal(t, balanceBefore+1000, balance.Offchain.Total)
|
||||
}
|
||||
|
||||
func TestSendOffchain(t *testing.T) {
|
||||
_, err := runArkCommand("onboard", "--amount", "1000", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
err = utils.GenerateBlock()
|
||||
require.NoError(t, err)
|
||||
|
||||
var receive utils.ArkReceive
|
||||
receiveStr, err := runArkCommand("receive")
|
||||
require.NoError(t, err)
|
||||
|
||||
require.NoError(t, json.Unmarshal([]byte(receiveStr), &receive))
|
||||
|
||||
_, err = utils.RunCommand("nigiri", "faucet", "--liquid", receive.Boarding)
|
||||
require.NoError(t, err)
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
_, err = runArkCommand("claim", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
|
||||
time.Sleep(3 * time.Second)
|
||||
|
||||
_, err = runArkCommand("send", "--amount", "1000", "--to", receive.Offchain, "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -113,17 +82,27 @@ func TestSendOffchain(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestUnilateralExit(t *testing.T) {
|
||||
_, err := runArkCommand("onboard", "--amount", "1000", "--password", utils.Password)
|
||||
var receive utils.ArkReceive
|
||||
receiveStr, err := runArkCommand("receive")
|
||||
require.NoError(t, err)
|
||||
err = utils.GenerateBlock()
|
||||
|
||||
require.NoError(t, json.Unmarshal([]byte(receiveStr), &receive))
|
||||
|
||||
_, err = utils.RunCommand("nigiri", "faucet", "--liquid", receive.Boarding)
|
||||
require.NoError(t, err)
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
_, err = runArkCommand("claim", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
|
||||
time.Sleep(3 * time.Second)
|
||||
|
||||
var balance utils.ArkBalance
|
||||
balanceStr, err := runArkCommand("balance")
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, json.Unmarshal([]byte(balanceStr), &balance))
|
||||
require.NotZero(t, balance.Offchain.Total)
|
||||
require.Len(t, balance.Onchain.Locked, 0)
|
||||
|
||||
_, err = runArkCommand("redeem", "--force", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
@@ -144,35 +123,24 @@ func TestUnilateralExit(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCollaborativeExit(t *testing.T) {
|
||||
_, err := runArkCommand("onboard", "--amount", "1000", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
err = utils.GenerateBlock()
|
||||
require.NoError(t, err)
|
||||
|
||||
var receive utils.ArkReceive
|
||||
receiveStr, err := runArkCommand("receive")
|
||||
require.NoError(t, err)
|
||||
|
||||
require.NoError(t, json.Unmarshal([]byte(receiveStr), &receive))
|
||||
|
||||
var balance utils.ArkBalance
|
||||
balanceStr, err := runArkCommand("balance")
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, json.Unmarshal([]byte(balanceStr), &balance))
|
||||
|
||||
balanceBefore := balance.Offchain.Total
|
||||
balanceOnchainBefore := balance.Onchain.Spendable
|
||||
|
||||
_, err = runArkCommand("redeem", "--amount", "1000", "--address", receive.Onchain, "--password", utils.Password)
|
||||
_, err = utils.RunCommand("nigiri", "faucet", "--liquid", receive.Boarding)
|
||||
require.NoError(t, err)
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
balanceStr, err = runArkCommand("balance")
|
||||
_, err = runArkCommand("claim", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, json.Unmarshal([]byte(balanceStr), &balance))
|
||||
|
||||
require.Equal(t, balanceBefore-1000, balance.Offchain.Total)
|
||||
require.Equal(t, balanceOnchainBefore+1000, balance.Onchain.Spendable)
|
||||
time.Sleep(3 * time.Second)
|
||||
|
||||
_, err = runArkCommand("redeem", "--amount", "10000", "--address", redeemAddr, "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func runArkCommand(arg ...string) (string, error) {
|
||||
@@ -258,6 +226,14 @@ func setupAspWallet() error {
|
||||
if _, err := utils.RunCommand("nigiri", "faucet", "--liquid", addr.Address); err != nil {
|
||||
return fmt.Errorf("failed to fund wallet: %s", err)
|
||||
}
|
||||
if _, err := utils.RunCommand("nigiri", "faucet", "--liquid", addr.Address); err != nil {
|
||||
return fmt.Errorf("failed to fund wallet: %s", err)
|
||||
}
|
||||
if _, err := utils.RunCommand("nigiri", "faucet", "--liquid", addr.Address); err != nil {
|
||||
return fmt.Errorf("failed to fund wallet: %s", err)
|
||||
}
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
composePath = "../../../../docker-compose.clark.regtest.yml"
|
||||
ONE_BTC = 1_0000_0000
|
||||
composePath = "../../../../docker-compose.clark.regtest.yml"
|
||||
redeemAddress = "bcrt1q2wrgf2hrkfegt0t97cnv4g5yvfjua9k6vua54d"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
@@ -27,6 +27,11 @@ func TestMain(m *testing.M) {
|
||||
|
||||
time.Sleep(10 * time.Second)
|
||||
|
||||
if err := utils.GenerateBlock(); err != nil {
|
||||
fmt.Printf("error generating block: %s", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := setupAspWallet(); err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
@@ -40,26 +45,6 @@ func TestMain(m *testing.M) {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
var receive utils.ArkReceive
|
||||
receiveStr, err := runClarkCommand("receive")
|
||||
if err != nil {
|
||||
fmt.Printf("error getting ark receive addresses: %s", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := json.Unmarshal([]byte(receiveStr), &receive); err != nil {
|
||||
fmt.Printf("error unmarshalling ark receive addresses: %s", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
_, err = utils.RunCommand("nigiri", "faucet", receive.Onchain)
|
||||
if err != nil {
|
||||
fmt.Printf("error funding ark account: %s", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
code := m.Run()
|
||||
|
||||
_, err = utils.RunCommand("docker", "compose", "-f", composePath, "down")
|
||||
@@ -70,38 +55,25 @@ func TestMain(m *testing.M) {
|
||||
os.Exit(code)
|
||||
}
|
||||
|
||||
func TestOnboard(t *testing.T) {
|
||||
var balance utils.ArkBalance
|
||||
balanceStr, err := runClarkCommand("balance")
|
||||
require.NoError(t, err)
|
||||
|
||||
require.NoError(t, json.Unmarshal([]byte(balanceStr), &balance))
|
||||
balanceBefore := balance.Offchain.Total
|
||||
|
||||
_, err = runClarkCommand("onboard", "--amount", "1000", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
err = utils.GenerateBlock()
|
||||
require.NoError(t, err)
|
||||
|
||||
balanceStr, err = runClarkCommand("balance")
|
||||
require.NoError(t, err)
|
||||
|
||||
require.NoError(t, json.Unmarshal([]byte(balanceStr), &balance))
|
||||
require.Equal(t, balanceBefore+1000, balance.Offchain.Total)
|
||||
}
|
||||
|
||||
func TestSendOffchain(t *testing.T) {
|
||||
_, err := runClarkCommand("onboard", "--amount", "1000", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
err = utils.GenerateBlock()
|
||||
require.NoError(t, err)
|
||||
|
||||
var receive utils.ArkReceive
|
||||
receiveStr, err := runClarkCommand("receive")
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, json.Unmarshal([]byte(receiveStr), &receive))
|
||||
|
||||
_, err = runClarkCommand("send", "--amount", "1000", "--to", receive.Offchain, "--password", utils.Password)
|
||||
err = json.Unmarshal([]byte(receiveStr), &receive)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = utils.RunCommand("nigiri", "faucet", receive.Boarding)
|
||||
require.NoError(t, err)
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
_, err = runClarkCommand("claim", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
|
||||
time.Sleep(3 * time.Second)
|
||||
|
||||
_, err = runClarkCommand("send", "--amount", "10000", "--to", receive.Offchain, "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
|
||||
var balance utils.ArkBalance
|
||||
@@ -120,17 +92,28 @@ func TestSendOffchain(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestUnilateralExit(t *testing.T) {
|
||||
_, err := runClarkCommand("onboard", "--amount", "1000", "--password", utils.Password)
|
||||
var receive utils.ArkReceive
|
||||
receiveStr, err := runClarkCommand("receive")
|
||||
require.NoError(t, err)
|
||||
err = utils.GenerateBlock()
|
||||
|
||||
err = json.Unmarshal([]byte(receiveStr), &receive)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = utils.RunCommand("nigiri", "faucet", receive.Boarding)
|
||||
require.NoError(t, err)
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
_, err = runClarkCommand("claim", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
|
||||
time.Sleep(3 * time.Second)
|
||||
|
||||
var balance utils.ArkBalance
|
||||
balanceStr, err := runClarkCommand("balance")
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, json.Unmarshal([]byte(balanceStr), &balance))
|
||||
require.NotZero(t, balance.Offchain.Total)
|
||||
require.Len(t, balance.Onchain.Locked, 0)
|
||||
|
||||
_, err = runClarkCommand("redeem", "--force", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
@@ -149,35 +132,25 @@ func TestUnilateralExit(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestCollaborativeExit(t *testing.T) {
|
||||
_, err := runClarkCommand("onboard", "--amount", "1000", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
err = utils.GenerateBlock()
|
||||
require.NoError(t, err)
|
||||
|
||||
var receive utils.ArkReceive
|
||||
receiveStr, err := runClarkCommand("receive")
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, json.Unmarshal([]byte(receiveStr), &receive))
|
||||
|
||||
var balance utils.ArkBalance
|
||||
balanceStr, err := runClarkCommand("balance")
|
||||
err = json.Unmarshal([]byte(receiveStr), &receive)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, json.Unmarshal([]byte(balanceStr), &balance))
|
||||
|
||||
balanceBefore := balance.Offchain.Total
|
||||
balanceOnchainBefore := balance.Onchain.Spendable
|
||||
|
||||
_, err = runClarkCommand("redeem", "--amount", "1000", "--address", receive.Onchain, "--password", utils.Password)
|
||||
_, err = utils.RunCommand("nigiri", "faucet", receive.Boarding)
|
||||
require.NoError(t, err)
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
balanceStr, err = runClarkCommand("balance")
|
||||
_, err = runClarkCommand("claim", "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, json.Unmarshal([]byte(balanceStr), &balance))
|
||||
|
||||
require.Equal(t, balanceBefore-1000, balance.Offchain.Total)
|
||||
require.Equal(t, balanceOnchainBefore+1000, balance.Onchain.Spendable)
|
||||
time.Sleep(3 * time.Second)
|
||||
|
||||
_, err = runClarkCommand("redeem", "--amount", "1000", "--address", redeemAddress, "--password", utils.Password)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
func runClarkCommand(arg ...string) (string, error) {
|
||||
@@ -259,5 +232,27 @@ func setupAspWallet() error {
|
||||
return fmt.Errorf("failed to fund wallet: %s", err)
|
||||
}
|
||||
|
||||
_, err = utils.RunCommand("nigiri", "faucet", addr.Address)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to fund wallet: %s", err)
|
||||
}
|
||||
|
||||
_, err = utils.RunCommand("nigiri", "faucet", addr.Address)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to fund wallet: %s", err)
|
||||
}
|
||||
|
||||
_, err = utils.RunCommand("nigiri", "faucet", addr.Address)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to fund wallet: %s", err)
|
||||
}
|
||||
|
||||
_, err = utils.RunCommand("nigiri", "faucet", addr.Address)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to fund wallet: %s", err)
|
||||
}
|
||||
|
||||
time.Sleep(5 * time.Second)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -28,11 +28,7 @@ type ArkBalance struct {
|
||||
|
||||
type ArkReceive struct {
|
||||
Offchain string `json:"offchain_address"`
|
||||
Onchain string `json:"onchain_address"`
|
||||
}
|
||||
|
||||
type ArkTrustedOnboard struct {
|
||||
OnboardAddress string `json:"onboard_address"`
|
||||
Boarding string `json:"boarding_address"`
|
||||
}
|
||||
|
||||
func GenerateBlock() error {
|
||||
|
||||
Reference in New Issue
Block a user