Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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/Bridge.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/CollateralManagement.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/FlyoverDiscovery.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/Legacy.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/Bridge.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/Bridge.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