Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/slither.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
sarif: results.sarif
fail-on: none
target: .
slither-args: --filter-paths "node_modules/|contracts/safe-test-contracts/"
slither-args: --filter-paths "node_modules/|contracts/test-contracts/safe-test-contracts/"
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0
with:
Expand Down
26 changes: 17 additions & 9 deletions .solhint.json
Original file line number Diff line number Diff line change
@@ -1,23 +1,31 @@
{
"extends": "solhint:recommended",
"rules": {
"avoid-throw": "off",
"compiler-version": ["error", "0.8.25"],
"max-line-length": ["error", 120],
"max-states-count": ["error", 20],
"avoid-tx-origin": "off",
"max-states-count": ["error", 10],
"not-rely-on-time": "off",
"func-visibility": [
"warn",
"error",
{
"ignoreConstructors": true
}
],
"no-global-import": "off",
"no-inline-assembly": "off",
"var-name-mixedcase": "off",
"reason-string": "off",
"no-unused-vars": "error",
"no-empty-blocks": "off"
"payable-fallback": "error",
"func-param-name-mixedcase": "error",
"private-vars-leading-underscore": [
"warn",
{
"strict": true
}
],
"imports-order": "warn",
"ordering": "warn",
"gas-length-in-loops": "error",
"comprehensive-interface": "error",
"explicit-types": "off",

"use-natspec": "off"
}
}
6 changes: 5 additions & 1 deletion .solhintignore
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
contracts/safe-test-contracts
contracts/test-contracts/safe-test-contracts
contracts/legacy

# TEMPORARY
contracts/split
19 changes: 0 additions & 19 deletions contracts/Migrations.sol

This file was deleted.

15 changes: 0 additions & 15 deletions contracts/WalletMock.sol

This file was deleted.

90 changes: 45 additions & 45 deletions contracts/Bridge.sol → contracts/interfaces/IBridge.sol
Original file line number Diff line number Diff line change
@@ -1,10 +1,54 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

interface Bridge {
interface IBridge {

receive() external payable;

function registerBtcTransaction(bytes calldata atx, int256 height, bytes calldata pmt) external;

function addSignature(bytes calldata pubkey, bytes[] calldata signatures, bytes calldata txhash) external;

function receiveHeaders(bytes[] calldata blocks) external;

function receiveHeader(bytes calldata ablock) external returns (int256);

function createFederation() external returns (int256);

function addFederatorPublicKey(bytes calldata key) external returns (int256);

function addFederatorPublicKeyMultikey(bytes calldata btcKey, bytes calldata rskKey,
bytes calldata mstKey) external returns (int256);

function commitFederation(bytes calldata hash) external returns (int256);

function rollbackFederation() external returns (int256);

function addLockWhitelistAddress(string calldata aaddress, int256 maxTransferValue) external returns (int256);

function addOneOffLockWhitelistAddress(string calldata aaddress, int256 maxTransferValue)
external returns (int256);

function addUnlimitedLockWhitelistAddress(string calldata aaddress) external returns (int256);

function removeLockWhitelistAddress(string calldata aaddress) external returns (int256);

function setLockWhitelistDisableBlockDelay(int256 disableDelay) external returns (int256);

function voteFeePerKbChange(int256 feePerKb) external returns (int256);

function updateCollections() external;

function increaseLockingCap(int256 newLockingCap) external returns (bool);

function registerBtcCoinbaseTransaction(bytes calldata btcTxSerialized, bytes32 blockHash,
bytes calldata pmtSerialized, bytes32 witnessMerkleRoot, bytes32 witnessReservedValue) external;

function registerFastBridgeBtcTransaction(bytes calldata btcTxSerialized, uint256 height,
bytes calldata pmtSerialized, bytes32 derivationArgumentsHash,
bytes calldata userRefundBtcAddress, address payable liquidityBridgeContractAddress,
bytes calldata liquidityProviderBtcAddress, bool shouldTransferToContract) external returns (int256);

function getBtcBlockchainBestChainHeight() external view returns (int);

function getStateForBtcReleaseClient() external view returns (bytes memory);
Expand All @@ -21,14 +65,6 @@ interface Bridge {

function getFederationAddress() external view returns (string memory);

function registerBtcTransaction(bytes calldata atx, int256 height, bytes calldata pmt) external;

function addSignature(bytes calldata pubkey, bytes[] calldata signatures, bytes calldata txhash) external;

function receiveHeaders(bytes[] calldata blocks) external;

function receiveHeader(bytes calldata ablock) external returns (int256);

function getFederationSize() external view returns (int256);

function getFederationThreshold() external view returns (int256);
Expand Down Expand Up @@ -56,17 +92,6 @@ interface Bridge {

function getRetiringFederationCreationBlockNumber() external view returns (int256);

function createFederation() external returns (int256);

function addFederatorPublicKey(bytes calldata key) external returns (int256);

function addFederatorPublicKeyMultikey(bytes calldata btcKey, bytes calldata rskKey,
bytes calldata mstKey) external returns (int256);

function commitFederation(bytes calldata hash) external returns (int256);

function rollbackFederation() external returns (int256);

function getPendingFederationHash() external view returns (bytes memory);

function getPendingFederationSize() external view returns (int256);
Expand All @@ -82,42 +107,17 @@ interface Bridge {

function getLockWhitelistEntryByAddress(string calldata aaddress) external view returns (int256);

function addLockWhitelistAddress(string calldata aaddress, int256 maxTransferValue) external returns (int256);

function addOneOffLockWhitelistAddress(string calldata aaddress, int256 maxTransferValue)
external returns (int256);

function addUnlimitedLockWhitelistAddress(string calldata aaddress) external returns (int256);

function removeLockWhitelistAddress(string calldata aaddress) external returns (int256);

function setLockWhitelistDisableBlockDelay(int256 disableDelay) external returns (int256);

function getFeePerKb() external view returns (int256);

function voteFeePerKbChange(int256 feePerKb) external returns (int256);

function updateCollections() external;

function getMinimumLockTxValue() external view returns (int256);

function getBtcTransactionConfirmations(bytes32 txHash, bytes32 blockHash,
uint256 merkleBranchPath, bytes32[] calldata merkleBranchHashes) external view returns (int256);

function getLockingCap() external view returns (int256);

function increaseLockingCap(int256 newLockingCap) external returns (bool);

function registerBtcCoinbaseTransaction(bytes calldata btcTxSerialized, bytes32 blockHash,
bytes calldata pmtSerialized, bytes32 witnessMerkleRoot, bytes32 witnessReservedValue) external;

function hasBtcBlockCoinbaseTransactionInformation(bytes32 blockHash) external view returns (bool);

function registerFastBridgeBtcTransaction(bytes calldata btcTxSerialized, uint256 height,
bytes calldata pmtSerialized, bytes32 derivationArgumentsHash,
bytes calldata userRefundBtcAddress, address payable liquidityBridgeContractAddress,
bytes calldata liquidityProviderBtcAddress, bool shouldTransferToContract) external returns (int256);

function getActiveFederationCreationBlockHeight() external view returns (uint256);

function getActivePowpegRedeemScript() external view returns (bytes memory);
Expand Down
28 changes: 28 additions & 0 deletions contracts/interfaces/ICollateralManagement.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {Flyover} from "../libraries/Flyover.sol";

interface ICollateralManagement {
event WithdrawCollateral(address indexed addr, uint indexed amount);
event Resigned(address indexed addr);
event PegInCollateralAdded(address indexed addr, uint256 indexed amount);
event PegOutCollateralAdded(address indexed addr, uint256 indexed amount);

error AlreadyResigned(address from);
error NotResigned(address from);
error ResignationDelayNotMet(address from, uint resignationBlockNum, uint resignDelayInBlocks);
error WithdrawalFailed(address from, uint amount);

function addPegInCollateralTo(address addr) external payable;
function addPegInCollateral() external payable;
function addPegOutCollateralTo(address addr) external payable;
function addPegOutCollateral() external payable;

function getPegInCollateral(address addr) external view returns (uint256);
function getPegOutCollateral(address addr) external view returns (uint256);
function getResignationBlock(address addr) external view returns (uint256);
function getMinCollateral() external view returns (uint256);
function isRegistered(Flyover.ProviderType providerType, address addr) external view returns (bool);
function isCollateralSufficient(Flyover.ProviderType providerType, address addr) external view returns (bool);
}
30 changes: 30 additions & 0 deletions contracts/interfaces/IFlyoverDiscovery.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {Flyover} from "../libraries/Flyover.sol";

interface IFlyoverDiscovery {
event Register(uint indexed id, address indexed from, uint256 indexed amount);
event ProviderUpdate(address indexed from, string name, string apiBaseUrl);
event ProviderStatusSet(uint indexed id, bool indexed status);

error NotAuthorized(address from);
error NotEOA(address from);
error InvalidProviderData(string name, string apiBaseUrl);
error InvalidProviderType(Flyover.ProviderType providerType);
error AlreadyRegistered(address from);
error InsufficientCollateral(uint amount);

function register(
string memory name,
string memory apiBaseUrl,
bool status,
Flyover.ProviderType providerType
) external payable returns (uint);

function updateProvider(string memory name,string memory apiBaseUrl) external;
function setProviderStatus(uint providerId, bool status) external;
function getProviders() external view returns (Flyover.LiquidityProvider[] memory);
function getProvider(address providerAddress) external view returns (Flyover.LiquidityProvider memory);
function isOperational(Flyover.ProviderType providerType, address addr) external view returns (bool);
}
18 changes: 18 additions & 0 deletions contracts/interfaces/ILegacy.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

import {QuotesV2} from "../legacy/QuotesV2.sol";

interface ILegacyLiquidityBridgeContract {
function register(
string memory name,
string memory apiBaseUrl,
bool status,
string memory providerType
) external payable returns (uint);

function depositPegout(
QuotesV2.PegOutQuote memory quote,
bytes memory signature
) external payable;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
pragma solidity 0.8.25;
pragma experimental ABIEncoderV2;

import "./Bridge.sol";
import "../interfaces/IBridge.sol";
import "./Quotes.sol";
import "./SignatureValidator.sol";
import "../libraries/SignatureValidator.sol";
import "@rsksmart/btc-transaction-solidity-helper/contracts/BtcUtils.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
Expand Down Expand Up @@ -96,7 +96,7 @@ contract LiquidityBridgeContract is Initializable, OwnableUpgradeable, Reentranc
address userAddress
);

Bridge public bridge;
IBridge public bridge;
mapping(address => uint256) private balances;
mapping(address => uint256) private collateral;
mapping(address => uint256) private pegoutCollateral;
Expand Down Expand Up @@ -159,7 +159,7 @@ contract LiquidityBridgeContract is Initializable, OwnableUpgradeable, Reentranc
require(_resignDelayBlocks >= 60, "LBC073");
__Ownable_init_unchained(msg.sender);
__ReentrancyGuard_init_unchained();
bridge = Bridge(_bridgeAddress);
bridge = IBridge(_bridgeAddress);
minCollateral = _minimumCollateral;
minPegIn = _minimumPegIn;
rewardP = _rewardPercentage;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
pragma solidity 0.8.25;
pragma experimental ABIEncoderV2;

import "./Bridge.sol";
import "../interfaces/IBridge.sol";
import "./QuotesV2.sol";
import "./SignatureValidator.sol";
import "../libraries/SignatureValidator.sol";
import "@rsksmart/btc-transaction-solidity-helper/contracts/BtcUtils.sol";
import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
Expand Down Expand Up @@ -90,7 +90,7 @@
event DaoFeeSent(bytes32 indexed quoteHash, uint256 amount);
event ProviderUpdate(address indexed providerAddress, string name, string url);

Bridge public bridge;
IBridge public bridge;

Check warning

Code scanning / Slither

State variables that could be declared constant Warning

mapping(address => uint256) private balances;
mapping(address => uint256) private collateral;
mapping(address => uint256) private pegoutCollateral;
Expand Down
File renamed without changes.
File renamed without changes.
17 changes: 17 additions & 0 deletions contracts/libraries/Flyover.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

library Flyover {
enum ProviderType { PegIn, PegOut, Both }

struct LiquidityProvider {
uint id;
address providerAddress;
bool status;
ProviderType providerType;
string name;
string apiBaseUrl;
}

error ProviderNotRegistered(address from);
}
Loading
Loading