Contracts
The ContractsApi class in the lightlink-bolt-sdk allows you to manage and interact with smart contracts on the Bolt platform. This section covers how to:
- Retrieve a list of contracts
- Add a new contract
- Deploy a new contract
- Add a webhook to a contract
- Read data from a contract
Note: For interactions with token-type contracts (like ERC20, ERC721, and ERC1155), you can perform specific operations via the Tokens API.
Table of Contents
Importing ContractsApi
To begin, import the ContractsApi and Configuration classes from the lightlink-bolt-sdk package.
import { Configuration, ContractsApi } from 'lightlink-bolt-sdk';
Initializing the SDK
Set up the configuration with your API key and base path. Then, create an instance of ContractsApi using this configuration.
const config = new Configuration({
basePath: 'https://bolt-v2.lightlink.io',
apiKey: 'YOUR_API_KEY',
});
const contractsApi = new ContractsApi(config);
Methods
1. Get Filtered Contracts
Retrieve a paginated list of contracts filtered by type.
Method Signature
contractsApi.getFilteredContracts(
type?: ContractType,
pageSize?: number,
pageNumber?: number
): Promise<IContractsListResponse>
Parameters
type
(optional): Filter contracts by type ('ERC20', 'ERC721', 'ERC1155', 'CUSTOM').pageSize
(optional): Number of contracts per page (default is 10).pageNumber
(optional): Page number to retrieve (default is 0).
Example Usage
import { ContractType } from 'lightlink-bolt-sdk';
const getFilteredContracts = async () => {
const type = ContractType.ERC20; // Filter by ERC20 contracts
const pageSize = 10;
const pageNumber = 0;
try {
const contracts = await contractsApi.getFilteredContracts(type, pageSize, pageNumber);
console.log('Filtered Contracts:', contracts);
} catch (error) {
console.error('Error fetching contracts:', error);
}
};
getFilteredContracts();
Response Structure
Returns an object of type IContractsListResponse
, which includes:
page_size
: Number of items per page.page
: Current page number.total_items
: Total number of items available.items
: Array of contract records.
2. Add a Contract
Add an existing contract to your organisation's list of contracts.
Method Signature
contractsApi.addContract(
contractData: IPostContract
): Promise<IContract>
Parameters
contractData
: An object containing the contract details.address
: The blockchain address of the contract.metadata
: Metadata about the contract (name, description, symbol, etc.).abi
: The ABI (Application Binary Interface) of the contract.
Example Usage
import { IPostContract, IContractMetadata } from 'lightlink-bolt-sdk';
const addContract = async () => {
const contractAddress = '0xExistingContractAddress';
const metadata: IContractMetadata = {
name: 'My Existing Contract',
description: 'Description of the contract',
symbol: 'MEC',
image: 'https://example.com/logo.png',
banner_image: 'https://example.com/banner.png',
};
const abi = [/* ABI Array */];
const contractData: IPostContract = {
address: contractAddress,
metadata,
abi,
};
try {
const contract = await contractsApi.addContract(contractData);
console.log('Contract Added:', contract);
} catch (error) {
console.error('Error adding contract:', error);
}
};
addContract();
Response Structure
Returns an object of type IContract
, which includes details about the added contract.
3. Deploy a Contract
Deploy a new contract to the blockchain.
Method Signature
contractsApi.deployContract(
contractData: IDeployContract
): Promise<IContract>
Parameters
contractData
: An object containing the deployment details.metadata
: Metadata about the contract (name, description, symbol, etc.).type
: The type of contract to deploy ('ERC20', 'ERC721', 'ERC1155', 'CUSTOM').
Example Usage
import { IDeployContract, ContractType, IContractMetadata } from 'lightlink-bolt-sdk';
const deployContract = async () => {
const metadata: IContractMetadata = {
name: 'My New Token',
description: 'An ERC20 token',
symbol: 'MNT',
};
const contractData: IDeployContract = {
metadata,
type: ContractType.ERC20,
};
try {
const contract = await contractsApi.deployContract(contractData);
console.log('Contract Deployed:', contract);
} catch (error) {
console.error('Error deploying contract:', error);
}
};
deployContract();
Response Structure
Returns an object of type IContract
, which includes details about the deployed contract.
4. Add a Webhook to a Contract
Add a webhook to a contract to receive notifications when certain events occur.
Method Signature
contractsApi.webhook(
contractAddress: string,
webhookData: IPostCreateWebhook
): Promise<any>
Parameters
contractAddress
: The address of the contract to add the webhook to.webhookData
: An object containing the webhook details.url
: The URL where webhook notifications should be sent.
Example Usage
import { IPostCreateWebhook } from 'lightlink-bolt-sdk';
const addWebhook = async () => {
const contractAddress = '0xContractAddress';
const webhookData: IPostCreateWebhook = {
url: 'https://yourapp.com/webhook-endpoint',
};
try {
const response = await contractsApi.webhook(contractAddress, webhookData);
console.log('Webhook Added:', response);
} catch (error) {
console.error('Error adding webhook:', error);
}
};
addWebhook();
Response Structure
Returns an object containing details about the added webhook.
5. Read from a Contract
Read data from a contract by calling a read-only function.
Method Signature
contractsApi.readContract(
address: string,
argsData: IPostReadContract
): Promise<IReadContractResponse>
Parameters
address
: The blockchain address of the contract.argsData
: An object containing the function name and arguments.function_name
: The name of the contract function to call.args
: An array of arguments to pass to the function.
Example Usage
import { IPostReadContract } from 'lightlink-bolt-sdk';
const readContract = async () => {
const contractAddress = '0xContractAddress';
const argsData: IPostReadContract = {
function_name: 'balanceOf',
args: ['0xAddressToCheck'],
};
try {
const result = await contractsApi.readContract(contractAddress, argsData);
console.log('Contract Read Result:', result);
} catch (error) {
console.error('Error reading contract:', error);
}
};
readContract();
Response Structure
Returns an object of type IReadContractResponse
, which includes:
result
: The result returned by the contract function.
Common Types
IContractsListResponse
Represents a paginated list of contracts.
interface IContractsListResponse {
page_size: number;
page: number;
total_items: number;
items: IContract[];
}
IContract
Represents a contract object.
interface IContract {
key: string;
address: string;
metadata: IContractMetadata;
abi: any[];
active: boolean;
type: ContractType;
organisation_key: string;
created: string;
modified: string;
removed: boolean;
}
IContractMetadata
Metadata associated with a contract.
interface IContractMetadata {
name: string;
description?: string;
symbol?: string;
image?: string;
banner_image?: string;
}
IPostContract
Data required to add an existing contract.
interface IPostContract {
address: string;
metadata: IContractMetadata;
abi: any[];
}
IDeployContract
Data required to deploy a new contract.
interface IDeployContract {
metadata: IContractMetadata;
type: ContractType;
}
ContractType
Enumeration of contract types.
enum ContractType {
ERC20 = 'ERC20',
ERC721 = 'ERC721',
ERC1155 = 'ERC1155',
CUSTOM = 'CUSTOM',
}
IPostCreateWebhook
Data required to create a webhook.
interface IPostCreateWebhook {
url: string;
}
IPostReadContract
Data required to read from a contract.
interface IPostReadContract {
function_name: string;
args: any[];
}
IReadContractResponse
Response from reading a contract.
interface IReadContractResponse {
result: any;
}
Next Steps
- For token-specific interactions (like minting, transferring tokens), refer to the Tokens API.
- Explore other sections like Executions to execute contract functions and monitor their statuses.
- Check the API Reference for detailed information on all available methods and data structures.
- Feel free to reach out to our support team if you have any questions or need further assistance.