UNPKG

@vechain/sdk-network

Version:

This module serves as the standard interface connecting decentralized applications (dApps) and users to the VeChainThor blockchain

143 lines (133 loc) 5.13 kB
import { TransactionClause, type ABIFunction, type ContractClause } from '@vechain/sdk-core'; import { type Abi } from 'abitype'; import { type VeChainSigner } from '../../signer/signers/types'; import { type SendTransactionResult, type SimulateTransactionOptions } from '../transactions/types'; import { Contract, ContractFactory } from './model'; import type { ContractCallOptions, ContractCallResult, ContractTransactionOptions } from './types'; import { type TransactionsModule } from '../transactions'; /** * Represents a module for interacting with smart contracts on the blockchain. */ class ContractsModule { constructor(readonly transactionsModule: TransactionsModule) {} /** * Creates a new instance of `ContractFactory` configured with the specified ABI, bytecode, and signer. * This factory is used to deploy new smart contracts to the blockchain network managed by this instance. * * @param abi - The Application Binary Interface (ABI) of the contract, which defines the contract's methods and events. * @param bytecode - The compiled bytecode of the contract, representing the contract's executable code. * @param signer - The signer used for signing transactions during contract deployment, ensuring the deployer's identity. * @returns An instance of `ContractFactory` configured with the provided ABI, bytecode, and signer, ready for deploying contracts. */ public createContractFactory<TAbi extends Abi>( abi: TAbi, bytecode: string, signer: VeChainSigner ): ContractFactory<TAbi> { return new ContractFactory<TAbi>(abi, bytecode, signer, this); } /** * Initializes and returns a new Contract instance with the provided parameters. * * @param address - The blockchain address of the contract to load. * @param abi - The Application Binary Interface (ABI) of the contract, which defines the contract's methods and structures. * @param signer - Optional. The signer caller, used for signing transactions when interacting with the contract. * @returns A new instance of the Contract, initialized with the provided address, ABI, and optionally, a signer. */ public load<Tabi extends Abi>( address: string, abi: Tabi, signer?: VeChainSigner ): Contract<Tabi> { return new Contract<Tabi>(address, abi, this, signer); } /** * This method is going to be deprecated in next release. * Use {@link TransactionsModule.executeCall} instead. */ public async executeCall( contractAddress: string, functionAbi: ABIFunction, functionData: unknown[], contractCallOptions?: ContractCallOptions ): Promise<ContractCallResult> { return await this.transactionsModule.executeCall( contractAddress, functionAbi, functionData, contractCallOptions ); } /** * This method is going to be deprecated in the next release. * Use {@link TransactionsModule.executeMultipleClausesCall} next. */ public async executeMultipleClausesCall( clauses: ContractClause[], options?: SimulateTransactionOptions ): Promise<ContractCallResult[]> { if (clauses.every((clause) => 'clause' in clause)) { return await this.transactionsModule.executeMultipleClausesCall( clauses, options ); } return await this.transactionsModule.executeMultipleClausesCall( clauses, options ); } /** * This method is going to be deprecated in the next release. * Use {@link TransactionsModule.executeTransaction} instead. */ public async executeTransaction( signer: VeChainSigner, contractAddress: string, functionAbi: ABIFunction, functionData: unknown[], options?: ContractTransactionOptions ): Promise<SendTransactionResult> { return await this.transactionsModule.executeTransaction( signer, contractAddress, functionAbi, functionData, options ); } /** * This method is going to be deprected in the next release. * Use {@link TransactionsModule.executeMultipleClausesTransaction} instead. */ public async executeMultipleClausesTransaction( clauses: ContractClause[] | TransactionClause[], signer: VeChainSigner, options?: ContractTransactionOptions ): Promise<SendTransactionResult> { return await this.transactionsModule.executeMultipleClausesTransaction( clauses, signer, options ); } /** * This method is going to be deprecated in the next release. * Use {@link TransactionsModule.getLegacyBaseGasPrice} instead. */ public async getLegacyBaseGasPrice(): Promise<ContractCallResult> { return await this.transactionsModule.getLegacyBaseGasPrice(); } } export { ContractsModule };