Skip to content

Commit 6e21cc0

Browse files
authored
Merge pull request #885 from rsksmart/v.2.5.0
V.2.5.0
2 parents e47c004 + 737874f commit 6e21cc0

File tree

268 files changed

+27911
-14189
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

268 files changed

+27911
-14189
lines changed

.mockery.yaml

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,17 @@ packages:
1414
sesClient:
1515
github.com/rsksmart/liquidity-provider-server/internal/adapters/dataproviders/rootstock:
1616
interfaces:
17-
LbcBinding:
1817
RskBridgeBinding:
1918
TransactionSigner:
2019
RpcClientBinding:
21-
LbcCallerBinding:
22-
LbcAdapter:
2320
RskBridgeAdapter:
2421
EventIteratorAdapter:
2522
RskSignerWallet:
23+
PeginContractAdapter:
24+
PegoutContractAdapter:
25+
CollateralManagementAdapter:
26+
DiscoveryBinding:
27+
ContractCallerBinding:
2628
github.com/rsksmart/liquidity-provider-server/internal/adapters/dataproviders/database/mongo:
2729
interfaces:
2830
DbClientBinding:
@@ -38,6 +40,8 @@ packages:
3840
DefaultCredentialsProvider:
3941
github.com/rsksmart/liquidity-provider-server/internal/adapters/entrypoints/rest/handlers:
4042
interfaces:
43+
ResignUseCase:
44+
AcceptQuoteUseCase:
4145
AddPeginCollateralUseCase:
4246
AddPegoutCollateralUseCase:
4347
ChangeStatusUseCase:
@@ -62,7 +66,6 @@ packages:
6266
GetPeginReportUseCase:
6367
RecommendedPegoutUseCase:
6468
RecommendedPeginUseCase:
65-
ResignUseCase:
6669
GetRevenueReportUseCase:
6770
GetSummariesReportUseCase:
6871
GetTrustedAccountsUseCase:
@@ -82,9 +85,13 @@ packages:
8285
PegConfiguration:
8386
github.com/rsksmart/liquidity-provider-server/internal/entities/blockchain:
8487
interfaces:
88+
Pausable:
8589
BitcoinWallet:
8690
RootstockRpcServer:
87-
LiquidityBridgeContract:
91+
PeginContract:
92+
PegoutContract:
93+
DiscoveryContract:
94+
CollateralManagementContract:
8895
github.com/rsksmart/liquidity-provider-server/internal/entities/rootstock:
8996
interfaces:
9097
BatchPegOutRepository:
@@ -108,3 +115,9 @@ packages:
108115
interfaces:
109116
EclipseCheckUseCase:
110117
UpdateBtcReleaseUseCase:
118+
github.com/rsksmart/liquidity-provider-server/internal/adapters/entrypoints/watcher/monitoring:
119+
interfaces:
120+
GetAssetReportUseCase:
121+
github.com/prometheus/client_golang/prometheus:
122+
interfaces:
123+
Registerer:

Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ tools: download
1717
go install golang.org/x/vuln/cmd/govulncheck@latest
1818
pip3 install pre-commit && pre-commit install
1919
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(shell go env GOPATH)/bin v1.63.4
20-
go install github.com/vektra/mockery/v2@v2.53.0 # ensures mockery version 2.53.0 is installed
20+
go install github.com/ethereum/go-ethereum/cmd/abigen@eb00f1694c9265f6909c19995a535eef246dcf1e # v1.14.13
21+
go install github.com/vektra/mockery/v2@v2.53.1 # ensures mockery version 2.53.1 is installed
2122

2223
download:
2324
go mod download
@@ -87,3 +88,6 @@ monitoring:
8788
-p $(MONITOR_PORT):$(MONITOR_PORT) \
8889
-e MONITOR_PORT=$(MONITOR_PORT) \
8990
monitoring
91+
92+
bindings:
93+
./scripts/create-bindings.sh $(IMAGE) && echo "Bindings generated successfully"

OpenApi.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,6 +1030,14 @@ paths:
10301030
"204":
10311031
description: ""
10321032
summary: Update Trusted Account
1033+
/metrics:
1034+
get:
1035+
description: ' Returns a predefined set of metrics to be consumed by a monitoring
1036+
system.'
1037+
responses:
1038+
"200":
1039+
description: ""
1040+
summary: Metrics
10331041
/pegin/acceptAuthenticatedQuote:
10341042
post:
10351043
description: ' Accepts Quote with trusted account signature'

cmd/application/lps/application.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import (
44
"context"
55
"errors"
66
"fmt"
7+
"os"
8+
"syscall"
9+
710
"github.com/rsksmart/liquidity-provider-server/internal/adapters/dataproviders"
811
"github.com/rsksmart/liquidity-provider-server/internal/adapters/entrypoints/rest/server"
912
"github.com/rsksmart/liquidity-provider-server/internal/adapters/entrypoints/watcher"
@@ -17,8 +20,6 @@ import (
1720
"github.com/rsksmart/liquidity-provider-server/internal/entities/blockchain"
1821
"github.com/rsksmart/liquidity-provider-server/internal/usecases"
1922
log "github.com/sirupsen/logrus"
20-
"os"
21-
"syscall"
2223
)
2324

2425
type Application struct {
@@ -126,7 +127,7 @@ func (app *Application) Run(env environment.Environment, logLevel log.Level) {
126127
app.addRunningService(app.btcRegistry.MonitoringWallet)
127128
app.addRunningService(app.messagingRegistry.EventBus)
128129

129-
registerParams := blockchain.NewProviderRegistrationParams(app.env.Provider.Name, app.env.Provider.ApiBaseUrl, true, app.env.Provider.ProviderType)
130+
registerParams := blockchain.NewProviderRegistrationParams(app.env.Provider.Name, app.env.Provider.ApiBaseUrl, true, app.env.Provider.ProviderType())
130131
id, err := app.useCaseRegistry.GetRegistrationUseCase().Run(registerParams)
131132
if errors.Is(err, usecases.AlreadyRegisteredError) {
132133
log.Info("Provider already registered")
@@ -171,6 +172,8 @@ func (app *Application) prepareWatchers() ([]watcher.Watcher, error) {
171172
app.watcherRegistry.PenalizationAlertWatcher,
172173
app.watcherRegistry.PegoutBridgeWatcher,
173174
app.watcherRegistry.BtcReleaseWatcher,
175+
app.watcherRegistry.QuoteMetricsWatcher,
176+
app.watcherRegistry.AssetReportWatcher,
174177
}
175178

176179
if app.env.Eclipse.Enabled {

cmd/utils/defaults/defaults.go

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,36 @@ func GetRsk(network string) (environment.RskEnv, error) {
99
switch network {
1010
case "regtest":
1111
return environment.RskEnv{
12-
ChainId: 33,
13-
LbcAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
14-
BridgeAddress: "0x0000000000000000000000000000000001000006",
15-
AccountNumber: 0,
12+
ChainId: 33,
13+
// TODO add addresses when deplpoyed
14+
PeginContractAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
15+
PegoutContractAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
16+
DiscoveryAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
17+
CollateralManagementAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
18+
BridgeAddress: "0x0000000000000000000000000000000001000006",
19+
AccountNumber: 0,
1620
}, nil
1721
case "testnet":
1822
return environment.RskEnv{
19-
ChainId: 31,
20-
LbcAddress: "0xc2a630c053d12d63d32b025082f6ba268db18300",
21-
BridgeAddress: "0x0000000000000000000000000000000001000006",
22-
AccountNumber: 0,
23+
ChainId: 31,
24+
// TODO add addresses when deplpoyed
25+
PeginContractAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
26+
PegoutContractAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
27+
DiscoveryAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
28+
CollateralManagementAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
29+
BridgeAddress: "0x0000000000000000000000000000000001000006",
30+
AccountNumber: 0,
2331
}, nil
2432
case "mainnet":
2533
return environment.RskEnv{
26-
ChainId: 30,
27-
LbcAddress: "0xaa9caf1e3967600578727f975f283446a3da6612",
28-
BridgeAddress: "0x0000000000000000000000000000000001000006",
29-
AccountNumber: 0,
34+
ChainId: 30,
35+
// TODO add addresses when deplpoyed
36+
PeginContractAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
37+
PegoutContractAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
38+
DiscoveryAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
39+
CollateralManagementAddress: "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8",
40+
BridgeAddress: "0x0000000000000000000000000000000001000006",
41+
AccountNumber: 0,
3042
}, nil
3143
default:
3244
return environment.RskEnv{}, errors.New("invalid network")

cmd/utils/refund_user_pegout/refund_user_pegout.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ func main() {
3434
}
3535

3636
ctx := context.Background()
37-
lbc, err := scripts.CreateLiquidityBridgeContract(ctx, bootstrap.Rootstock, env, environment.DefaultTimeouts())
37+
pegoutContract, err := scripts.CreatePegoutContract(ctx, bootstrap.Rootstock, env, environment.DefaultTimeouts())
3838
if err != nil {
3939
scripts.ExitWithError(2, "Error accessing the Liquidity Bridge Contract", err)
4040
}
4141

42-
txHash, err := ExecuteRefundUserPegOut(lbc, scriptInput.QuoteHashBytes)
42+
txHash, err := ExecuteRefundUserPegOut(pegoutContract, scriptInput.QuoteHashBytes)
4343
if err != nil {
4444
scripts.ExitWithError(2, "Error on transaction execution", err)
4545
}
@@ -53,7 +53,7 @@ func ReadRefundUserPegOutScriptInput(scriptInput *RefundUserPegOutScriptInput) {
5353
flag.StringVar(&scriptInput.AwsLocalEndpoint, "aws-endpoint", "http://localhost:4566", "AWS endpoint for localstack")
5454
flag.StringVar(&scriptInput.SecretSource, "secret-src", "", "The source of the secrets to execute the transaction. Must be one of the following: env, aws")
5555
flag.StringVar(&scriptInput.RskEndpoint, "rsk-endpoint", "", "The URL of the RSK RPC server. E.g. http://localhost:4444")
56-
flag.StringVar(&scriptInput.CustomLbcAddress, "lbc-address", "", "Custom address of the liquidity bridge contract. If not provided will use the network default.")
56+
flag.StringVar(&scriptInput.CustomPegoutAddress, "custom-pegout-address", "", "Custom address of the pegout contract. If not provided will use the network default.")
5757

5858
flag.StringVar(&scriptInput.KeystoreFile, "keystore-file", "", "Path to the keystore file. Only required if the secret source is env")
5959
flag.StringVar(&scriptInput.EncryptedJsonSecret, "keystore-secret", "", "Name of the secret storing the keystore. Only required if the secret source is aws")
@@ -71,6 +71,6 @@ func ParseRefundUserPegOutScriptInput(parse scripts.ParseFunc, scriptInput *Refu
7171
return scriptInput.BaseInput.ToEnv(pwdReader)
7272
}
7373

74-
func ExecuteRefundUserPegOut(lbc blockchain.LiquidityBridgeContract, quoteHash string) (string, error) {
75-
return lbc.RefundUserPegOut(quoteHash)
74+
func ExecuteRefundUserPegOut(pegoutContract blockchain.PegoutContract, quoteHash string) (string, error) {
75+
return pegoutContract.RefundUserPegOut(quoteHash)
7676
}

cmd/utils/refund_user_pegout/refund_user_pegout_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,17 +92,17 @@ func TestParseRefundUserPegOutScriptInput(t *testing.T) {
9292

9393
func TestRefundUserPegOut(t *testing.T) {
9494
t.Run("should execute refund user peg out successfully", func(t *testing.T) {
95-
lbc := &mocks.LiquidityBridgeContractMock{}
95+
pegoutContract := &mocks.PegoutContractMock{}
9696
expectedTxHash := test.AnyHash
9797

9898
// Setup mock expectations
99-
lbc.On("RefundUserPegOut", testQuoteHash).Return(expectedTxHash, nil)
99+
pegoutContract.On("RefundUserPegOut", testQuoteHash).Return(expectedTxHash, nil)
100100

101-
txHash, err := ExecuteRefundUserPegOut(lbc, testQuoteHash)
101+
txHash, err := ExecuteRefundUserPegOut(pegoutContract, testQuoteHash)
102102
require.NoError(t, err)
103103
assert.Equal(t, expectedTxHash, txHash)
104104

105105
// Verify all expectations were met
106-
lbc.AssertExpectations(t)
106+
pegoutContract.AssertExpectations(t)
107107
})
108108
}

cmd/utils/register_pegin/register_pegin.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,12 @@ func main() {
8989
scripts.ExitWithError(errorCode, "Error connecting to BTC node", err)
9090
}
9191

92-
lbc, err := scripts.CreateLiquidityBridgeContract(ctx, bootstrap.Rootstock, env, environment.DefaultTimeouts())
92+
peginContract, err := scripts.CreatePeginContract(ctx, bootstrap.Rootstock, env, environment.DefaultTimeouts())
9393
if err != nil {
9494
scripts.ExitWithError(errorCode, "Error accessing the Liquidity Bridge Contract", err)
9595
}
9696

97-
receipt, err := ExecuteRegisterPegIn(bitcoin.NewBitcoindRpc(btcClient), lbc, parsedInput)
97+
receipt, err := ExecuteRegisterPegIn(bitcoin.NewBitcoindRpc(btcClient), peginContract, parsedInput)
9898
if err != nil {
9999
scripts.ExitWithError(errorCode, "Error executing register PegIn", err)
100100
}
@@ -151,7 +151,7 @@ func ParseRegisterPegInScriptInput(parse scripts.ParseFunc, scriptInput *Registe
151151

152152
func ExecuteRegisterPegIn(
153153
btcRpc blockchain.BitcoinNetwork,
154-
lbc blockchain.LiquidityBridgeContract,
154+
peginContract blockchain.PeginContract,
155155
parsedInput ParsedRegisterPegInInput,
156156
) (blockchain.TransactionReceipt, error) {
157157
var pmt, rawTx []byte
@@ -168,7 +168,7 @@ func ExecuteRegisterPegIn(
168168
return blockchain.TransactionReceipt{}, err
169169
}
170170

171-
return lbc.RegisterPegin(blockchain.RegisterPeginParams{
171+
return peginContract.RegisterPegin(blockchain.RegisterPeginParams{
172172
QuoteSignature: parsedInput.Signature,
173173
BitcoinRawTransaction: rawTx,
174174
PartialMerkleTree: pmt,

cmd/utils/register_pegin/register_pegin_test.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -72,75 +72,75 @@ func TestExecuteRegisterPegIn(t *testing.T) {
7272
}
7373
t.Run("should execute RegisterPegIn successfully", func(t *testing.T) {
7474
rpc := new(mocks.BtcRpcMock)
75-
lbc := new(mocks.LiquidityBridgeContractMock)
75+
peginContract := new(mocks.PeginContractMock)
7676
rpc.On("GetPartialMerkleTree", parsedInput.BtcTxHash).Return(pmt, nil).Once()
7777
rpc.On("GetRawTransaction", parsedInput.BtcTxHash).Return(rawTx, nil).Once()
7878
rpc.On("GetTransactionBlockInfo", parsedInput.BtcTxHash).Return(blockInfo, nil).Once()
79-
lbc.On("RegisterPegin", blockchain.RegisterPeginParams{
79+
peginContract.On("RegisterPegin", blockchain.RegisterPeginParams{
8080
QuoteSignature: parsedInput.Signature, BitcoinRawTransaction: rawTx,
8181
PartialMerkleTree: pmt, BlockHeight: blockHeight, Quote: parsedInput.Quote,
8282
}).Return(expectedReceipt, nil).Once()
8383

84-
result, err := ExecuteRegisterPegIn(rpc, lbc, parsedInput)
84+
result, err := ExecuteRegisterPegIn(rpc, peginContract, parsedInput)
8585
require.NoError(t, err)
8686
assert.Equal(t, expectedReceipt, result)
8787
rpc.AssertExpectations(t)
88-
lbc.AssertExpectations(t)
88+
peginContract.AssertExpectations(t)
8989
})
9090

9191
t.Run("should return error if GetPartialMerkleTree fails", func(t *testing.T) {
9292
rpc := new(mocks.BtcRpcMock)
93-
lbc := new(mocks.LiquidityBridgeContractMock)
93+
peginContract := new(mocks.PeginContractMock)
9494
rpc.On("GetPartialMerkleTree", parsedInput.BtcTxHash).Return([]byte{}, assert.AnError).Once()
9595

96-
result, err := ExecuteRegisterPegIn(rpc, lbc, parsedInput)
96+
result, err := ExecuteRegisterPegIn(rpc, peginContract, parsedInput)
9797
require.Error(t, err)
9898
assert.Equal(t, blockchain.TransactionReceipt{}, result)
9999
rpc.AssertExpectations(t)
100-
lbc.AssertNotCalled(t, "RegisterPegin")
100+
peginContract.AssertNotCalled(t, "RegisterPegin")
101101
})
102102

103103
t.Run("should return error if GetRawTransaction fails", func(t *testing.T) {
104104
rpc := new(mocks.BtcRpcMock)
105-
lbc := new(mocks.LiquidityBridgeContractMock)
105+
peginContract := new(mocks.PeginContractMock)
106106
rpc.On("GetPartialMerkleTree", parsedInput.BtcTxHash).Return(pmt, nil).Once()
107107
rpc.On("GetRawTransaction", parsedInput.BtcTxHash).Return([]byte{}, assert.AnError).Once()
108108

109-
result, err := ExecuteRegisterPegIn(rpc, lbc, parsedInput)
109+
result, err := ExecuteRegisterPegIn(rpc, peginContract, parsedInput)
110110
require.Error(t, err)
111111
assert.Equal(t, blockchain.TransactionReceipt{}, result)
112112
rpc.AssertExpectations(t)
113-
lbc.AssertNotCalled(t, "RegisterPegin")
113+
peginContract.AssertNotCalled(t, "RegisterPegin")
114114
})
115115

116116
t.Run("should return error if GetTransactionBlockInfo fails", func(t *testing.T) {
117117
rpc := new(mocks.BtcRpcMock)
118-
lbc := new(mocks.LiquidityBridgeContractMock)
118+
peginContract := new(mocks.PeginContractMock)
119119
rpc.On("GetPartialMerkleTree", parsedInput.BtcTxHash).Return(pmt, nil).Once()
120120
rpc.On("GetRawTransaction", parsedInput.BtcTxHash).Return(rawTx, nil).Once()
121121
rpc.On("GetTransactionBlockInfo", parsedInput.BtcTxHash).Return(blockchain.BitcoinBlockInformation{}, assert.AnError).Once()
122122

123-
result, err := ExecuteRegisterPegIn(rpc, lbc, parsedInput)
123+
result, err := ExecuteRegisterPegIn(rpc, peginContract, parsedInput)
124124

125125
require.Error(t, err)
126126
assert.Equal(t, blockchain.TransactionReceipt{}, result)
127127
rpc.AssertExpectations(t)
128-
lbc.AssertNotCalled(t, "RegisterPegin")
128+
peginContract.AssertNotCalled(t, "RegisterPegin")
129129
})
130130

131131
t.Run("should return error if RegisterPegin fails", func(t *testing.T) {
132132
rpc := new(mocks.BtcRpcMock)
133-
lbc := new(mocks.LiquidityBridgeContractMock)
133+
peginContract := new(mocks.PeginContractMock)
134134
rpc.On("GetPartialMerkleTree", parsedInput.BtcTxHash).Return(pmt, nil).Once()
135135
rpc.On("GetRawTransaction", parsedInput.BtcTxHash).Return(rawTx, nil).Once()
136136
rpc.On("GetTransactionBlockInfo", parsedInput.BtcTxHash).Return(blockInfo, nil).Once()
137-
lbc.On("RegisterPegin", mock.Anything).Return(blockchain.TransactionReceipt{}, assert.AnError).Once()
137+
peginContract.On("RegisterPegin", mock.Anything).Return(blockchain.TransactionReceipt{}, assert.AnError).Once()
138138

139-
result, err := ExecuteRegisterPegIn(rpc, lbc, parsedInput)
139+
result, err := ExecuteRegisterPegIn(rpc, peginContract, parsedInput)
140140
require.Error(t, err)
141141
assert.Equal(t, blockchain.TransactionReceipt{}, result)
142142
rpc.AssertExpectations(t)
143-
lbc.AssertExpectations(t)
143+
peginContract.AssertExpectations(t)
144144
})
145145
}
146146

@@ -163,7 +163,7 @@ func TestRegisterPegInScriptInput_ToEnv(t *testing.T) {
163163
assert.Equal(t, "btcPassword", env.Btc.Password)
164164
// we assert the rsk defaults to ensure the method called its parent method
165165
assert.Equal(t, uint64(33), env.Rsk.ChainId)
166-
assert.Equal(t, "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8", env.Rsk.LbcAddress)
166+
assert.Equal(t, "0x8901a2bbf639bfd21a97004ba4d7ae2bd00b8da8", env.Rsk.PeginContractAddress)
167167
assert.Equal(t, "0x0000000000000000000000000000000001000006", env.Rsk.BridgeAddress)
168168
assert.Equal(t, 0, env.Rsk.AccountNumber)
169169
})

0 commit comments

Comments
 (0)