Filecoin.sol
For conceptual information on built-in actors, including their purposes, how they work and more, see the conceptual guide.
Prerequisites
Before you can call a built-in actor using the API, you must import Filecoin.sol using one of the available methods.
Works on
Filecoin.sol is for contracts deployed to Filecoin EVM networks that expose Filecoin built-in actor precompiles. Use the current filecoin-solidity-api package on Filecoin mainnet or Calibration testnet, and use the same API surface when testing against a local Filecoin EVM-compatible network.
Call a built-in actor
For available actors and methods see Available actors and methods.
Once you’ve either imported particular contracts manually or installed filecoin-solidity-api using npm, create a callable method to access the built-in actor methods the way you normally would in a Solidity smart contract. Working examples of smart contracts that call built-in actor methods are available below.
For conceptual information on built-in actors, including their purposes, how they work and available types, see the conceptual guide.
Call the account actor
The following example imports the Account actor library and creates a callable method for each of the available actor methods. For the full code, see the GitHub repository.
pragma solidity ^0.8.18;
import "../types/AccountTypes.sol";
import "../types/CommonTypes.sol";
import "../AccountAPI.sol";
import "../utils/UtilsHandlers.sol";
import "../utils/Errors.sol";
contract AccountApiTest {
function authenticate_message(CommonTypes.FilActorId target, AccountTypes.AuthenticateMessageParams memory params) public view {
int256 exit_code = AccountAPI.authenticateMessage(target, params);
Errors.revertOnError(exit_code);
}
function universal_receiver_hook(CommonTypes.FilActorId target, CommonTypes.UniversalReceiverParams memory params) public {
(int256 exit_code, ) = UtilsHandlers.universalReceiverHook(target, params);
Errors.revertOnError(exit_code);
}
}
Call the DataCap actor
The following example imports the DataCap actor library and creates a callable method for each of the available actor methods. For the full code, see the GitHub repository.
pragma solidity ^0.8.18;
import "../types/DataCapTypes.sol";
import "../types/CommonTypes.sol";
import "../cbor/BigIntCbor.sol";
import "../DataCapAPI.sol";
import "../utils/UtilsHandlers.sol";
import "../utils/Errors.sol";
contract DataCapApiTest {
function name() public view returns (string memory) {
(int256 exit_code, string memory result) = DataCapAPI.name();
Errors.revertOnError(exit_code);
return result;
}
function symbol() public view returns (string memory) {
(int256 exit_code, string memory result) = DataCapAPI.symbol();
Errors.revertOnError(exit_code);
return result;
}
function total_supply() public view returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = DataCapAPI.totalSupply();
Errors.revertOnError(exit_code);
return result;
}
function balance(CommonTypes.FilAddress memory addr) public view returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = DataCapAPI.balance(addr);
Errors.revertOnError(exit_code);
return result;
}
function allowance(DataCapTypes.GetAllowanceParams memory params) public view returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = DataCapAPI.allowance(params);
Errors.revertOnError(exit_code);
return result;
}
function transfer(DataCapTypes.TransferParams memory params) public returns (DataCapTypes.TransferReturn memory) {
(int256 exit_code, DataCapTypes.TransferReturn memory result) = DataCapAPI.transfer(params);
Errors.revertOnError(exit_code);
return result;
}
function transfer_from(DataCapTypes.TransferFromParams memory params) public returns (DataCapTypes.TransferFromReturn memory) {
(int256 exit_code, DataCapTypes.TransferFromReturn memory result) = DataCapAPI.transferFrom(params);
Errors.revertOnError(exit_code);
return result;
}
function increase_allowance(DataCapTypes.IncreaseAllowanceParams memory params) public returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = DataCapAPI.increaseAllowance(params);
Errors.revertOnError(exit_code);
return result;
}
function decrease_allowance(DataCapTypes.DecreaseAllowanceParams memory params) public returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = DataCapAPI.decreaseAllowance(params);
Errors.revertOnError(exit_code);
return result;
}
function revoke_allowance(CommonTypes.FilAddress memory operator) public returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = DataCapAPI.revokeAllowance(operator);
Errors.revertOnError(exit_code);
return result;
}
function burn(CommonTypes.BigInt memory amount) public returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = DataCapAPI.burn(amount);
Errors.revertOnError(exit_code);
return result;
}
function burn_from(DataCapTypes.BurnFromParams memory params) public returns (DataCapTypes.BurnFromReturn memory) {
(int256 exit_code, DataCapTypes.BurnFromReturn memory result) = DataCapAPI.burnFrom(params);
Errors.revertOnError(exit_code);
return result;
}
function handle_filecoin_method(uint64 method, uint64 codec, bytes calldata params) public pure {
UtilsHandlers.handleFilecoinMethod(method, codec, params);
}
}
Call the storage market actor
The following example imports the Storage market actor library and creates a callable method for each of the available actor methods. For the full code, see the GitHub repository.
pragma solidity ^0.8.18;
import "../MarketAPI.sol";
import "../types/MarketTypes.sol";
import "../utils/Errors.sol";
contract MarketApiTest {
function add_balance(CommonTypes.FilAddress memory providerOrClient, uint256 value) public payable {
(int256 exit_code, ) = MarketAPI.addBalance(providerOrClient, value);
Errors.revertOnError(exit_code);
}
function withdraw_balance(MarketTypes.WithdrawBalanceParams memory params) public returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = MarketAPI.withdrawBalance(params);
Errors.revertOnError(exit_code);
return result;
}
function get_balance(CommonTypes.FilAddress memory addr) public view returns (MarketTypes.GetBalanceReturn memory) {
(int256 exit_code, MarketTypes.GetBalanceReturn memory result) = MarketAPI.getBalance(addr);
Errors.revertOnError(exit_code);
return result;
}
function get_deal_data_commitment(uint64 dealID) public view returns (MarketTypes.GetDealDataCommitmentReturn memory) {
(int256 exit_code, MarketTypes.GetDealDataCommitmentReturn memory result) = MarketAPI.getDealDataCommitment(dealID);
Errors.revertOnError(exit_code);
return result;
}
function get_deal_client(uint64 dealID) public view returns (uint64) {
(int256 exit_code, uint64 result) = MarketAPI.getDealClient(dealID);
Errors.revertOnError(exit_code);
return result;
}
function get_deal_provider(uint64 dealID) public view returns (uint64) {
(int256 exit_code, uint64 result) = MarketAPI.getDealProvider(dealID);
Errors.revertOnError(exit_code);
return result;
}
function get_deal_label(uint64 dealID) public view returns (CommonTypes.DealLabel memory) {
(int256 exit_code, CommonTypes.DealLabel memory result) = MarketAPI.getDealLabel(dealID);
Errors.revertOnError(exit_code);
return result;
}
function get_deal_term(uint64 dealID) public view returns (MarketTypes.GetDealTermReturn memory) {
(int256 exit_code, MarketTypes.GetDealTermReturn memory result) = MarketAPI.getDealTerm(dealID);
Errors.revertOnError(exit_code);
return result;
}
function get_deal_total_price(uint64 dealID) public view returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = MarketAPI.getDealTotalPrice(dealID);
Errors.revertOnError(exit_code);
return result;
}
function get_deal_client_collateral(uint64 dealID) public view returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = MarketAPI.getDealClientCollateral(dealID);
Errors.revertOnError(exit_code);
return result;
}
function get_deal_provider_collateral(uint64 dealID) public view returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = MarketAPI.getDealProviderCollateral(dealID);
Errors.revertOnError(exit_code);
return result;
}
function get_deal_verified(uint64 dealID) public view returns (bool) {
(int256 exit_code, bool result) = MarketAPI.getDealVerified(dealID);
Errors.revertOnError(exit_code);
return result;
}
function get_deal_activation(uint64 dealID) public view returns (MarketTypes.GetDealActivationReturn memory) {
(int256 exit_code, MarketTypes.GetDealActivationReturn memory result) = MarketAPI.getDealActivation(dealID);
Errors.revertOnError(exit_code);
return result;
}
function publish_storage_deals(MarketTypes.PublishStorageDealsParams memory params) public returns (MarketTypes.PublishStorageDealsReturn memory) {
(int256 exit_code, MarketTypes.PublishStorageDealsReturn memory result) = MarketAPI.publishStorageDeals(params);
Errors.revertOnError(exit_code);
return result;
}
}
Call the miner actor
The following example imports the Miner actor library and creates a callable method for each of the available actor methods. For the full code, see the GitHub repository.
pragma solidity ^0.8.18;
import "../MinerAPI.sol";
import "../types/MinerTypes.sol";
import "../utils/Errors.sol";
contract MinerApiTest {
function get_owner(CommonTypes.FilActorId target) public view returns (MinerTypes.GetOwnerReturn memory) {
(int256 exit_code, MinerTypes.GetOwnerReturn memory result) = MinerAPI.getOwner(target);
Errors.revertOnError(exit_code);
return result;
}
function change_owner_address(CommonTypes.FilActorId target, CommonTypes.FilAddress memory addr) public {
int256 exit_code = MinerAPI.changeOwnerAddress(target, addr);
Errors.revertOnError(exit_code);
}
function is_controlling_address(CommonTypes.FilActorId target, CommonTypes.FilAddress memory addr) public view returns (bool) {
(int256 exit_code, bool result) = MinerAPI.isControllingAddress(target, addr);
Errors.revertOnError(exit_code);
return result;
}
function get_sector_size(CommonTypes.FilActorId target) public view returns (uint64) {
(int256 exit_code, uint64 result) = MinerAPI.getSectorSize(target);
Errors.revertOnError(exit_code);
return result;
}
function get_available_balance(CommonTypes.FilActorId target) public view returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = MinerAPI.getAvailableBalance(target);
Errors.revertOnError(exit_code);
return result;
}
function get_vesting_funds(CommonTypes.FilActorId target) public view returns (MinerTypes.VestingFunds[] memory) {
(int256 exit_code, MinerTypes.VestingFunds[] memory result) = MinerAPI.getVestingFunds(target);
Errors.revertOnError(exit_code);
return result;
}
function change_beneficiary(CommonTypes.FilActorId target, MinerTypes.ChangeBeneficiaryParams memory params) public {
int256 exit_code = MinerAPI.changeBeneficiary(target, params);
Errors.revertOnError(exit_code);
}
function get_beneficiary(CommonTypes.FilActorId target) public view returns (MinerTypes.GetBeneficiaryReturn memory) {
(int256 exit_code, MinerTypes.GetBeneficiaryReturn memory result) = MinerAPI.getBeneficiary(target);
Errors.revertOnError(exit_code);
return result;
}
function change_worker_address(CommonTypes.FilActorId target, MinerTypes.ChangeWorkerAddressParams memory params) public {
int256 exit_code = MinerAPI.changeWorkerAddress(target, params);
Errors.revertOnError(exit_code);
}
function change_peer_id(CommonTypes.FilActorId target, CommonTypes.FilAddress memory newId) public {
int256 exit_code = MinerAPI.changePeerId(target, newId);
Errors.revertOnError(exit_code);
}
function change_multiaddresses(CommonTypes.FilActorId target, CommonTypes.FilAddress[] memory new_multi_addrs) public {
int256 exit_code = MinerAPI.changeMultiaddresses(target, new_multi_addrs);
Errors.revertOnError(exit_code);
}
function repay_debt(CommonTypes.FilActorId target) public {
int256 exit_code = MinerAPI.repayDebt(target);
Errors.revertOnError(exit_code);
}
function confirm_change_worker_address(CommonTypes.FilActorId target) public {
int256 exit_code = MinerAPI.confirmChangeWorkerAddress(target);
Errors.revertOnError(exit_code);
}
function get_peer_id(CommonTypes.FilActorId target) public view returns (CommonTypes.FilAddress memory) {
(int256 exit_code, CommonTypes.FilAddress memory result) = MinerAPI.getPeerId(target);
Errors.revertOnError(exit_code);
return result;
}
function get_multiaddresses(CommonTypes.FilActorId target) public view returns (CommonTypes.FilAddress[] memory) {
(int256 exit_code, CommonTypes.FilAddress[] memory result) = MinerAPI.getMultiaddresses(target);
Errors.revertOnError(exit_code);
return result;
}
function withdraw_balance(CommonTypes.FilActorId target, CommonTypes.BigInt memory amount) public returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = MinerAPI.withdrawBalance(target, amount);
Errors.revertOnError(exit_code);
return result;
}
}
Call the storage power actor
The following example imports the Storage power actor library and creates a callable method for each of the available actor methods. For the full code, see the GitHub repository.
pragma solidity ^0.8.18;
import "../types/PowerTypes.sol";
import "../types/CommonTypes.sol";
import "../PowerAPI.sol";
import "../utils/Errors.sol";
contract PowerApiTest {
function create_miner(PowerTypes.CreateMinerParams memory params, uint256 value) public payable returns (PowerTypes.CreateMinerReturn memory) {
(int256 exit_code, PowerTypes.CreateMinerReturn memory result) = PowerAPI.createMiner(params, value);
Errors.revertOnError(exit_code);
return result;
}
function miner_count() public view returns (uint64) {
(int256 exit_code, uint64 result) = PowerAPI.minerCount();
Errors.revertOnError(exit_code);
return result;
}
function miner_consensus_count() public view returns (int64) {
(int256 exit_code, int64 result) = PowerAPI.minerConsensusCount();
Errors.revertOnError(exit_code);
return result;
}
function network_raw_power() public view returns (CommonTypes.BigInt memory) {
(int256 exit_code, CommonTypes.BigInt memory result) = PowerAPI.networkRawPower();
Errors.revertOnError(exit_code);
return result;
}
function miner_raw_power(uint64 minerID) public view returns (PowerTypes.MinerRawPowerReturn memory) {
(int256 exit_code, PowerTypes.MinerRawPowerReturn memory result) = PowerAPI.minerRawPower(minerID);
Errors.revertOnError(exit_code);
return result;
}
}
Call the verified registry actor
The following example imports the verified registry actor library and creates a callable method for each of the available actor methods. For the full code, see the GitHub repository.
pragma solidity ^0.8.18;
import "../types/VerifRegTypes.sol";
import "../types/CommonTypes.sol";
import "../VerifRegAPI.sol";
import "../utils/Errors.sol";
contract VerifRegApiTest {
function get_claims(VerifRegTypes.GetClaimsParams memory params) public view returns (VerifRegTypes.GetClaimsReturn memory) {
(int256 exit_code, VerifRegTypes.GetClaimsReturn memory result) = VerifRegAPI.getClaims(params);
Errors.revertOnError(exit_code);
return result;
}
function add_verified_client(VerifRegTypes.AddVerifiedClientParams memory params) public {
int256 exit_code = VerifRegAPI.addVerifiedClient(params);
Errors.revertOnError(exit_code);
}
function remove_expired_allocations(
VerifRegTypes.RemoveExpiredAllocationsParams memory params
) public returns (VerifRegTypes.RemoveExpiredAllocationsReturn memory) {
(int256 exit_code, VerifRegTypes.RemoveExpiredAllocationsReturn memory result) = VerifRegAPI.removeExpiredAllocations(params);
Errors.revertOnError(exit_code);
return result;
}
function extend_claim_terms(VerifRegTypes.ClaimTerm[] memory claimTerms) public returns (CommonTypes.BatchReturn memory) {
(int256 exit_code, CommonTypes.BatchReturn memory result) = VerifRegAPI.extendClaimTerms(claimTerms);
Errors.revertOnError(exit_code);
return result;
}
function remove_expired_claims(VerifRegTypes.RemoveExpiredClaimsParams memory params) public returns (VerifRegTypes.RemoveExpiredClaimsReturn memory) {
(int256 exit_code, VerifRegTypes.RemoveExpiredClaimsReturn memory result) = VerifRegAPI.removeExpiredClaims(params);
Errors.revertOnError(exit_code);
return result;
}
}