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);
}
}