Skip to main content

Stakehouse Solidity API

The Stakehouse Solidity API is an easy plug and play Stakehouse protocol API where the protocol Solidity interfaces are already connected with the correct contract addresses for the required network.

Installation

Simply run the following in your terminal

npm i @blockswaplab/stakehouse-solidity-api

or

yarn add @blockswaplab/stakehouse-solidity-api

or

forge install stakehouse-dev/stakehouse-solidity-api

Using the above, you'll get both the API and the smart contract interfaces for the Stakehouse protocol.

Importing the interfaces

Solidity import path for the API

@blockswaplab/stakehouse-solidity-api/contracts

Solidity import path for the interfaces

@blockswaplab/stakehouse-contract-interfaces/contracts/interfaces

The full referrence list of solidity interfaces can be found here.

Example Usage

pragma solidity ^0.8.0;

import { StakehouseAPI } from "@blockswaplab/stakehouse-solidity-api/contracts/StakehouseAPI.sol";

contract Consumer is StakehouseAPI {

function getStakehouseForBlsPublicKey(bytes calldata _blsPublicKey) external view returns (address) {
return getStakeHouseUniverse().memberKnotToStakeHouse(_blsPublicKey);
}

function registerInitials(
address _user, bytes calldata _blsPublicKey, bytes calldata _blsSignature
) external {
getTransactionRouter().registerValidatorInitials(_user, _blsPublicKey, _blsSignature);
}
}

Consuming contract only needs to know what functions it wants to call and the Smart Contract API takes care of the rest (including the network selection).

Currently Supported Networks:

  • Holesky
  • Mainnet
  • Goerli (deprecated)

Testing locally

In order to test the contracts locally you will either have to have a local fork of one of the networks, or override the helper functions returning mocked smart contract values. See the example below:

pragma solidity ^0.8.0;
import { StakehouseAPI } from "@blockswaplab/stakehouse-solidity-api/contracts/StakehouseAPI.sol";
import { IStakeHouseUniverse } from "@blockswaplab/stakehouse-contract-interfaces/contracts/interfaces/IStakeHouseUniverse.sol";
contract MockContract is StakehouseAPI {
function getStakeHouseUniverse() internal view override virtual returns (IStakeHouseUniverse) {
return IStakeHouseUniverse(0xEA674fdDe714fd979de3EdF0F56AA9716B898ec8);
}
}