@human-protocol/sdk / Modules / staking / StakingClient
Class: StakingClient
staking .StakingClient
Introduction
This client enables to perform actions on staking contracts and obtain staking information from both the contracts and subgraph.
Internally, the SDK will use one network or another according to the network ID of the signerOrProvider
. To use this client, it is recommended to initialize it using the static build
method.
Copy static async build (signerOrProvider: Signer | Provider);
A Signer
or a Provider
should be passed depending on the use case of this module:
Signer : when the user wants to use this model in order to send transactions caling the contract functions.
Provider : when the user wants to use this model in order to get information from the contracts or subgraph.
Installation
npm
Copy npm install @human-protocol/sdk
yarn
Copy yarn install @human-protocol/sdk
Code example
Signer
Using private key(backend)
Copy import { StakingClient } from '@human-protocol/sdk' ;
import { Wallet , providers } from 'ethers' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const privateKey = 'YOUR_PRIVATE_KEY'
const provider = new providers .JsonRpcProvider (rpcUrl);
const signer = new Wallet (privateKey , provider);
const stakingClient = await StakingClient .build (signer);
Using Wagmi(frontend)
Copy import { useSigner , useChainId } from 'wagmi' ;
import { StakingClient } from '@human-protocol/sdk' ;
const { data: signer } = useSigner ();
const stakingClient = await StakingClient .build (signer);
Provider
Copy import { StakingClient } from '@human-protocol/sdk' ;
import { providers } from 'ethers' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const provider = new providers .JsonRpcProvider (rpcUrl);
const stakingClient = await StakingClient .build (provider);
Table of contents
Constructors
Properties
Methods
Constructors
constructor
• new StakingClient (signerOrProvider
, network
)
StakingClient constructor
Parameters
Defined in
staking.ts:118
Properties
escrowFactoryContract
• escrowFactoryContract : EscrowFactory
Defined in
staking.ts:110
network
• network : NetworkData
Defined in
staking.ts:107
signerOrProvider
• signerOrProvider : Signer
| Provider
Defined in
staking.ts:106
stakingContract
• stakingContract : Staking
Defined in
staking.ts:109
tokenContract
• tokenContract : HMToken
Defined in
staking.ts:108
Methods
allocate
▸ allocate (escrowAddress
, amount
): Promise
<void
>
This function allocates a portion of the staked tokens to a specific escrow.
Must have tokens staked
Parameters
Returns
Promise
<void
>
Returns void if successful. Throws error if any.
Code example
Copy import { ethers , Wallet , providers } from 'ethers' ;
import { StakingClient } from '@human-protocol/sdk' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const privateKey = 'YOUR_PRIVATE_KEY'
const provider = new providers .JsonRpcProvider (rpcUrl);
const signer = new Wallet (privateKey , provider);
const stakingClient = await StakingClient .build (signer);
const amount = ethers . utils .parseUnits ( 5 , 'ether' ); //convert from ETH to WEI
await stakingClient .allocate ( '0x62dD51230A30401C455c8398d06F85e4EaB6309f' , amount);
Defined in
staking.ts:428
approveStake
▸ approveStake (amount
): Promise
<void
>
This function approves the staking contract to transfer a specified amount of tokens when the user stakes. It increases the allowance for the staking contract.
Parameters
Returns
Promise
<void
>
Returns void if successful. Throws error if any.
Code example
Copy import { ethers , Wallet , providers } from 'ethers' ;
import { StakingClient } from '@human-protocol/sdk' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const privateKey = 'YOUR_PRIVATE_KEY'
const provider = new providers .JsonRpcProvider (rpcUrl);
const signer = new Wallet (privateKey , provider);
const stakingClient = await StakingClient .build (signer);
const amount = ethers . utils .parseUnits ( 5 , 'ether' ); //convert from ETH to WEI
await stakingClient .approveStake (amount);
Defined in
staking.ts:193
closeAllocation
▸ closeAllocation (escrowAddress
): Promise
<void
>
This function drops the allocation from a specific escrow.
The escrow must have allocation The escrow must be cancelled or completed.
Parameters
Returns
Promise
<void
>
Returns void if successful. Throws error if any.
Code example
Copy import { Wallet , providers } from 'ethers' ;
import { StakingClient } from '@human-protocol/sdk' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const privateKey = 'YOUR_PRIVATE_KEY'
const provider = new providers .JsonRpcProvider (rpcUrl);
const signer = new Wallet (privateKey , provider);
const stakingClient = await StakingClient .build (signer);
await stakingClient .closeAllocation ( '0x62dD51230A30401C455c8398d06F85e4EaB6309f' );
Defined in
staking.ts:483
distributeRewards
▸ distributeRewards (escrowAddress
): Promise
<void
>
This function drops the allocation from a specific escrow.
The escrow must have rewards added
Parameters
Returns
Promise
<void
>
Returns void if successful. Throws error if any.
Code example
Copy import { Wallet , providers } from 'ethers' ;
import { StakingClient } from '@human-protocol/sdk' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const privateKey = 'YOUR_PRIVATE_KEY'
const provider = new providers .JsonRpcProvider (rpcUrl);
const signer = new Wallet (privateKey , provider);
const stakingClient = await StakingClient .build (signer);
await stakingClient .distributeRewards ( '0x62dD51230A30401C455c8398d06F85e4EaB6309f' );
Defined in
staking.ts:526
getAllocation
▸ getAllocation (escrowAddress
): Promise
<IAllocation
>
This function returns information about the allocation of the specified escrow.
Parameters
Returns
Promise
<IAllocation
>
Returns allocation info if exists.
Code example
Copy import { StakingClient } from '@human-protocol/sdk' ;
import { providers } from 'ethers' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const provider = new providers .JsonRpcProvider (rpcUrl);
const stakingClient = await StakingClient .build (provider);
const allocationInfo = await stakingClient .getAllocation ( '0x62dD51230A30401C455c8398d06F85e4EaB6309f' );
Defined in
staking.ts:643
getLeader
▸ getLeader (address
): Promise
<ILeader
>
This function returns all the leader details of the protocol.
Parameters
Returns
Promise
<ILeader
>
Returns an array with all the leader details.
Code example
Copy import { StakingClient } from '@human-protocol/sdk' ;
import { providers } from 'ethers' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const provider = new providers .JsonRpcProvider (rpcUrl);
const stakingClient = await StakingClient .build (provider);
const leaders = await stakingClient .getLeaders ();
Defined in
staking.ts:569
getLeaders
▸ getLeaders (filter?
): Promise
<ILeader
[]>
This function returns the leader data for the given address.
Parameters
Returns
Promise
<ILeader
[]>
Returns the leader details.
Code example
Copy import { StakingClient } from '@human-protocol/sdk' ;
import { providers } from 'ethers' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const provider = new providers .JsonRpcProvider (rpcUrl);
const stakingClient = await StakingClient .build (provider);
const leader = await stakingClient .getLeader ( '0x62dD51230A30401C455c8398d06F85e4EaB6309f' );
Defined in
staking.ts:608
getRewards
▸ getRewards (slasherAddress
): Promise
<IReward
[]>
This function returns information about the rewards for a given slasher address.
Parameters
Returns
Promise
<IReward
[]>
Returns an array of Reward objects that contain the rewards earned by the user through slashing other users.
Code example
Copy import { StakingClient } from '@human-protocol/sdk' ;
import { providers } from 'ethers' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const provider = new providers .JsonRpcProvider (rpcUrl);
const stakingClient = await StakingClient .build (provider);
const rewards = await stakingClient .getRewards ( '0x62dD51230A30401C455c8398d06F85e4EaB6309f' );
Defined in
staking.ts:681
slash
▸ slash (slasher
, staker
, escrowAddress
, amount
): Promise
<void
>
This function reduces the allocated amount by an staker in an escrow and transfers those tokens to the reward pool. This allows the slasher to claim them later.
Parameters
Returns
Promise
<void
>
Returns void if successful. Throws error if any.
Code example
Copy import { ethers , Wallet , providers } from 'ethers' ;
import { StakingClient } from '@human-protocol/sdk' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const privateKey = 'YOUR_PRIVATE_KEY'
const provider = new providers .JsonRpcProvider (rpcUrl);
const signer = new Wallet (privateKey , provider);
const stakingClient = await StakingClient .build (signer);
const amount = ethers . utils .parseUnits ( 5 , 'ether' ); //convert from ETH to WEI
await stakingClient.slash('0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266', '0x62dD51230A30401C455c8398d06F85e4EaB6309f', amount);
Defined in
staking.ts:361
stake
▸ stake (amount
): Promise
<void
>
This function stakes a specified amount of tokens on a specific network.
approveStake
must be called before
Parameters
Returns
Promise
<void
>
Returns void if successful. Throws error if any.
Code example
Copy import { ethers , Wallet , providers } from 'ethers' ;
import { StakingClient } from '@human-protocol/sdk' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const privateKey = 'YOUR_PRIVATE_KEY'
const provider = new providers .JsonRpcProvider (rpcUrl);
const signer = new Wallet (privateKey , provider);
const stakingClient = await StakingClient .build (signer);
const amount = ethers . utils .parseUnits ( 5 , 'ether' ); //convert from ETH to WEI
await stakingClient .approveStake (amount); // if it was already approved before, this is not necessary
await stakingClient .approveStake (amount);
Defined in
staking.ts:238
unstake
▸ unstake (amount
): Promise
<void
>
This function unstakes tokens from staking contract. The unstaked tokens stay locked for a period of time.
Must have tokens available to unstake
Parameters
Returns
Promise
<void
>
Returns void if successful. Throws error if any.
Code example
Copy import { ethers , Wallet , providers } from 'ethers' ;
import { StakingClient } from '@human-protocol/sdk' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const privateKey = 'YOUR_PRIVATE_KEY'
const provider = new providers .JsonRpcProvider (rpcUrl);
const signer = new Wallet (privateKey , provider);
const stakingClient = await StakingClient .build (signer);
const amount = ethers . utils .parseUnits ( 5 , 'ether' ); //convert from ETH to WEI
await stakingClient .unstake (amount);
Defined in
staking.ts:282
withdraw
▸ withdraw (): Promise
<void
>
This function withdraws unstaked and non locked tokens form staking contract to the user wallet.
Must have tokens available to withdraw
Returns
Promise
<void
>
Returns void if successful. Throws error if any.
Code example
Copy import { Wallet , providers } from 'ethers' ;
import { StakingClient } from '@human-protocol/sdk' ;
const rpcUrl = 'YOUR_RPC_URL' ;
const privateKey = 'YOUR_PRIVATE_KEY'
const provider = new providers .JsonRpcProvider (rpcUrl);
const signer = new Wallet (privateKey , provider);
const stakingClient = await StakingClient .build (signer);
await stakingClient .withdraw ();
Defined in
staking.ts:324
build
▸ Static
build (signerOrProvider
): Promise
<StakingClient
>
Creates an instance of StakingClient from a Signer or Provider.
Parameters
Returns
Promise
<StakingClient
>
An instance of StakingClient
Throws
Thrown if the provider does not exist for the provided Signer
Throws
Thrown if the network's chainId is not supported
Defined in
staking.ts:146