InitErrors
Set of possible errors when starting the client.
Allocator.Error || std.Thread.SpawnError || error{ InvalidNetworkConfig, InvalidIPCPath, FailedToConnect }
ReadLoopErrors
Set of possible errors when reading from the socket.
SetSockOptError || error{ FailedToJsonParseResponse, Closed, InvalidTypeMessage, UnexpectedError }
SendRpcRequestErrors
Set of possible errors when send a rpc request.
Allocator.Error || EthereumZigErrors || std.posix.WriteError || ParseFromValueError || error{ReachedMaxRetryLimit}
BasicRequestErrors
Set of generic errors when sending a rpc request.
SendRpcRequestErrors || error{NoSpaceLeft}
InitOptions
Set of intial options for the IPC Client.
Properties
struct {
/// Allocator to use to create the ChildProcess and other allocations
allocator: Allocator
/// The reader buffer growth rate
growth_rate: ?usize = null
/// The target chains config.
network_config: NetworkConfig
/// Callback function for when the connection is closed.
onClose: ?*const fn () void = null
/// Callback function for everytime an event is parsed.
onEvent: ?*const fn (args: JsonParsed(Value)) anyerror!void = null
/// Callback function for everytime an error is caught.
onError: ?*const fn (args: []const u8) anyerror!void = null
}
Init
Starts the IPC client and create the connection.
This will also start the read loop in a seperate thread.
Example var client = try IPC.init(.{
.allocator = testing.allocator,
.network_config = .{
.endpoint = .{ .path = "/tmp/anvil.ipc" },
},
});
defer client.deinit();
Signature
pub fn init(opts: InitOptions) InitErrors!*IPC
Deinit
Clears memory, closes the stream and destroys any previously created pointers.
All future calls will deadlock.
Signature
pub fn deinit(self: *IPC) void
Connect
Connects to the socket. Will try to reconnect in case of failures.
Fails when match retries are reached or a invalid ipc path is provided
Signature
pub fn connect(self: *IPC, path: []const u8) error{ InvalidIPCPath, FailedToConnect }!Stream
BlobBaseFee
Grabs the current base blob fee.
RPC Method: eth_blobBaseFee
Signature
pub fn blobBaseFee(self: *IPC) BasicRequestErrors!RPCResponse(Gwei)
CreateAccessList
Create an accessList of addresses and storageKeys for a transaction to access
RPC Method: eth_createAccessList
Signature
pub fn createAccessList(self: *IPC, call_object: EthCall, opts: BlockNumberRequest) BasicRequestErrors!RPCResponse(AccessListResult)
EstimateBlobMaxFeePerGas
Estimate the gas used for blobs
Uses blobBaseFee
and gasPrice
to calculate this estimation
Signature
pub fn estimateBlobMaxFeePerGas(self: *IPC) BasicRequestErrors!Gwei
EstimateFeesPerGas
Estimate maxPriorityFeePerGas and maxFeePerGas. Will make more than one network request.
Uses the baseFeePerGas
included in the block to calculate the gas fees.
Will return an error in case the baseFeePerGas
is null.
Signature
pub fn estimateFeesPerGas(
self: *IPC,
call_object: EthCall,
base_fee_per_gas: ?Gwei,
) (BasicRequestErrors || error{ InvalidBlockNumber, UnableToFetchFeeInfoFromBlock })!EstimateFeeReturn
EstimateGas
Generates and returns an estimate of how much gas is necessary to allow the transaction to complete. The transaction will not be added to the blockchain. Note that the estimate may be significantly more than the amount of gas actually used by the transaction, for a variety of reasons including EVM mechanics and node performance.
RPC Method: eth_estimateGas
Signature
pub fn estimateGas(self: *IPC, call_object: EthCall, opts: BlockNumberRequest) BasicRequestErrors!RPCResponse(Gwei)
EstimateMaxFeePerGasManual
Estimates maxPriorityFeePerGas manually. If the node you are currently using
supports eth_maxPriorityFeePerGas
consider using estimateMaxFeePerGas
.
Signature
pub fn estimateMaxFeePerGasManual(
self: *IPC,
base_fee_per_gas: ?Gwei,
) (BasicRequestErrors || error{ InvalidBlockNumber, UnableToFetchFeeInfoFromBlock })!Gwei
EstimateMaxFeePerGas
Only use this if the node you are currently using supports eth_maxPriorityFeePerGas
.
Signature
pub fn estimateMaxFeePerGas(self: *IPC) BasicRequestErrors!RPCResponse(Gwei)
FeeHistory
Returns historical gas information, allowing you to track trends over time.
RPC Method: eth_feeHistory
Signature
pub fn feeHistory(
self: *IPC,
blockCount: u64,
newest_block: BlockNumberRequest,
reward_percentil: ?[]const f64,
) BasicRequestErrors!RPCResponse(FeeHistory)
GetAccounts
Returns a list of addresses owned by client.
RPC Method: eth_accounts
Signature
pub fn getAccounts(self: *IPC) BasicRequestErrors!RPCResponse([]const Address)
GetAddressBalance
Returns the balance of the account of given address.
RPC Method: eth_getBalance
Signature
pub fn getAddressBalance(self: *IPC, opts: BalanceRequest) BasicRequestErrors!RPCResponse(Wei)
GetAddressTransactionCount
Returns the number of transactions sent from an address.
RPC Method: eth_getTransactionCount
Signature
pub fn getAddressTransactionCount(self: *IPC, opts: BalanceRequest) BasicRequestErrors!RPCResponse(u64)
GetBlockByHash
Returns the number of most recent block.
RPC Method: eth_getBlockByHash
Signature
pub fn getBlockByHash(self: *IPC, opts: BlockHashRequest) (BasicRequestErrors || error{InvalidBlockHash})!RPCResponse(Block)
GetBlockByHashType
Returns information about a block by hash.
Use this if the provided block type doesnt fit the expected object that it's returned from the endpoint and you know exactly the shape that the data will be in.
RPC Method: eth_getBlockByHash
Signature
pub fn getBlockByHashType(
self: *IPC,
comptime T: type,
opts: BlockHashRequest,
) (BasicRequestErrors || error{InvalidBlockHash})!RPCResponse(T)
GetBlockByNumber
Returns information about a block by number.
RPC Method: eth_getBlockByNumber
Signature
pub fn getBlockByNumber(self: *IPC, opts: BlockRequest) (BasicRequestErrors || error{InvalidBlockNumber})!RPCResponse(Block)
GetBlockByNumberType
Returns information about a block by number.
Ask for a expected type since the way that our json parser works on unions it will try to parse it until it can complete it for a union member. This can be slow so if you know exactly what is the expected type you can pass it and it will return the json parsed response.
RPC Method: eth_getBlockByNumber
Signature
pub fn getBlockByNumberType(
self: *IPC,
comptime T: type,
opts: BlockRequest,
) (BasicRequestErrors || error{InvalidBlockNumber})!RPCResponse(T)
GetBlockNumber
Returns the number of transactions in a block from a block matching the given block number.
RPC Method: eth_blockNumber
Signature
pub fn getBlockNumber(self: *IPC) BasicRequestErrors!RPCResponse(u64)
GetBlockTransactionCountByHash
Returns the number of transactions in a block from a block matching the given block hash.
RPC Method: eth_getBlockTransactionCountByHash
Signature
pub fn getBlockTransactionCountByHash(self: *IPC, block_hash: Hash) BasicRequestErrors!RPCResponse(usize)
GetBlockTransactionCountByNumber
Returns the number of transactions in a block from a block matching the given block number.
RPC Method: eth_getBlockTransactionCountByNumber
Signature
pub fn getBlockTransactionCountByNumber(self: *IPC, opts: BlockNumberRequest) BasicRequestErrors!RPCResponse(usize)
GetChainId
Returns the chain ID used for signing replay-protected transactions.
RPC Method: eth_chainId
Signature
pub fn getChainId(self: *IPC) BasicRequestErrors!RPCResponse(usize)
GetClientVersion
Returns the node's client version
RPC Method: web3_clientVersion
Signature
pub fn getClientVersion(self: *IPC) BasicRequestErrors!RPCResponse([]const u8)
GetContractCode
Returns code at a given address.
RPC Method: eth_getCode
Signature
pub fn getContractCode(self: *IPC, opts: BalanceRequest) BasicRequestErrors!RPCResponse(Hex)
GetCurrentRpcEvent
Get the first event of the rpc channel.
Only call this if you are sure that the channel has messages because this will block until a message is able to be fetched.
Signature
pub fn getCurrentRpcEvent(self: *IPC) JsonParsed(Value)
GetCurrentSubscriptionEvent
Get the first event of the subscription channel.
Only call this if you are sure that the channel has messages because this will block until a message is able to be fetched.
Signature
pub fn getCurrentSubscriptionEvent(self: *IPC) JsonParsed(Value)
GetFilterOrLogChanges
Polling method for a filter, which returns an array of logs which occurred since last poll or Returns an array of all logs matching filter with given id depending on the selected method https://ethereum.org/en/developers/docs/apis/json-rpc#eth_getfilterchanges https://ethereum.org/en/developers/docs/apis/json-rpc#eth_getfilterlogs
Signature
pub fn getFilterOrLogChanges(
self: *IPC,
filter_id: u128,
method: EthereumRpcMethods,
) (BasicRequestErrors || error{ InvalidFilterId, InvalidRpcMethod })!RPCResponse(Logs)
GetGasPrice
Returns an estimate of the current price per gas in wei. For example, the Besu client examines the last 100 blocks and returns the median gas unit price by default.
RPC Method: eth_gasPrice
Signature
pub fn getGasPrice(self: *IPC) BasicRequestErrors!RPCResponse(Gwei)
GetLogs
Returns an array of all logs matching a given filter object.
RPC Method: eth_getLogs
Signature
pub fn getLogs(
self: *IPC,
opts: LogRequest,
tag: ?BalanceBlockTag,
) (BasicRequestErrors || error{InvalidLogRequestParams})!RPCResponse(Logs)
GetLogsSubEvent
Parses the Value
in the sub-channel as a log event
Signature
pub fn getLogsSubEvent(self: *IPC) ParseFromValueError!RPCResponse(EthereumSubscribeResponse(Log))
GetNewHeadsBlockSubEvent
Parses the Value
in the sub-channel as a new heads block event
Signature
pub fn getNewHeadsBlockSubEvent(self: *IPC) ParseFromValueError!RPCResponse(EthereumSubscribeResponse(Block))
GetNetworkListenStatus
Returns true if client is actively listening for network connections.
RPC Method: net_listening
Signature
pub fn getNetworkListenStatus(self: *IPC) BasicRequestErrors!RPCResponse(bool)
GetNetworkPeerCount
Returns number of peers currently connected to the client.
RPC Method: net_peerCount
Signature
pub fn getNetworkPeerCount(self: *IPC) BasicRequestErrors!RPCResponse(usize)
GetNetworkVersionId
Returns the current network id.
RPC Method: net_version
Signature
pub fn getNetworkVersionId(self: *IPC) BasicRequestErrors!RPCResponse(usize)
GetPendingTransactionsSubEvent
Parses the Value
in the sub-channel as a pending transaction hash event
Signature
pub fn getPendingTransactionsSubEvent(self: *IPC) BasicRequestErrors!RPCResponse(EthereumSubscribeResponse(Hash))
GetProof
Returns the account and storage values, including the Merkle proof, of the specified account
RPC Method: eth_getProof
Signature
pub fn getProof(
self: *IPC,
opts: ProofRequest,
tag: ?ProofBlockTag,
) (BasicRequestErrors || error{ExpectBlockNumberOrTag})!RPCResponse(ProofResult)
GetProtocolVersion
Returns the current Ethereum protocol version.
RPC Method: eth_protocolVersion
Signature
pub fn getProtocolVersion(self: *IPC) BasicRequestErrors!RPCResponse(u64)
GetRawTransactionByHash
Returns the raw transaction data as a hexadecimal string for a given transaction hash
RPC Method: eth_getRawTransactionByHash
Signature
pub fn getRawTransactionByHash(self: *IPC, tx_hash: Hash) BasicRequestErrors!RPCResponse(Hex)
GetSha3Hash
Returns the Keccak256 hash of the given message.
RPC Method: web_sha3
Signature
pub fn getSha3Hash(self: *IPC, message: []const u8) BasicRequestErrors!RPCResponse(Hash)
GetStorage
Returns the value from a storage position at a given address.
RPC Method: eth_getStorageAt
Signature
pub fn getStorage(self: *IPC, address: Address, storage_key: Hash, opts: BlockNumberRequest) BasicRequestErrors!RPCResponse(Hash)
GetSyncStatus
Returns null if the node has finished syncing. Otherwise it will return the sync progress.
RPC Method: eth_syncing
Signature
pub fn getSyncStatus(self: *IPC) ?RPCResponse(SyncProgress)
GetTransactionByBlockHashAndIndex
Returns information about a transaction by block hash and transaction index position.
RPC Method: eth_getTransactionByBlockHashAndIndex
Signature
pub fn getTransactionByBlockHashAndIndex(
self: *IPC,
block_hash: Hash,
index: usize,
) (BasicRequestErrors || error{TransactionNotFound})!RPCResponse(Transaction)
GetTransactionByBlockHashAndIndexType
Returns information about a transaction by block hash and transaction index position.
Use this if the provided transaction type doesnt fit the expected object that it's returned from the endpoint and you know exactly the shape that the data will be in.
RPC Method: eth_getTransactionByBlockHashAndIndex
Signature
pub fn getTransactionByBlockHashAndIndexType(
self: *IPC,
comptime T: type,
block_hash: Hash,
index: usize,
) (BasicRequestErrors || error{TransactionNotFound})!RPCResponse(T)
GetTransactionByBlockNumberAndIndex
Returns information about a transaction by block number and transaction index position.
RPC Method: eth_getTransactionByBlockNumberAndIndex
Signature
pub fn getTransactionByBlockNumberAndIndex(
self: *IPC,
opts: BlockNumberRequest,
index: usize,
) (BasicRequestErrors || error{TransactionNotFound})!RPCResponse(Transaction)
GetTransactionByBlockNumberAndIndexType
Returns information about a transaction by block number and transaction index position.
Use this if the provided transaction type doesnt fit the expected object that it's returned from the endpoint and you know exactly the shape that the data will be in.
RPC Method: eth_getTransactionByBlockNumberAndIndex
Signature
pub fn getTransactionByBlockNumberAndIndexType(
self: *IPC,
comptime T: type,
opts: BlockNumberRequest,
index: usize,
) (BasicRequestErrors || error{TransactionNotFound})!RPCResponse(T)
GetTransactionByHash
Returns the information about a transaction requested by transaction hash.
RPC Method: eth_getTransactionByHash
Signature
pub fn getTransactionByHash(self: *IPC, transaction_hash: Hash) (BasicRequestErrors || error{TransactionNotFound})!RPCResponse(Transaction)
GetTransactionByHashType
Returns the information about a transaction requested by transaction hash.
Use this if the provided transaction type doesnt fit the expected object that it's returned from the endpoint and you know exactly the shape that the data will be in.
RPC Method: eth_getTransactionByHash
Signature
pub fn getTransactionByHashType(
self: *IPC,
comptime T: type,
transaction_hash: Hash,
) (BasicRequestErrors || error{TransactionNotFound})!RPCResponse(T)
GetTransactionReceipt
Returns the receipt of a transaction by transaction hash.
RPC Method: eth_getTransactionReceipt
Signature
pub fn getTransactionReceipt(
self: *IPC,
transaction_hash: Hash,
) (BasicRequestErrors || error{TransactionReceiptNotFound})!RPCResponse(TransactionReceipt)
GetTransactionReceiptType
Returns the receipt of a transaction by transaction hash.
Use this if the provided receipt type doesnt fit the expected object that it's returned from the endpoint and you know exactly the shape that the data will be in.
RPC Method: eth_getTransactionReceipt
Signature
pub fn getTransactionReceiptType(
self: *IPC,
comptime T: type,
transaction_hash: Hash,
) (BasicRequestErrors || error{TransactionReceiptNotFound})!RPCResponse(TransactionReceipt)
GetTxPoolContent
The content inspection property can be queried to list the exact details of all the transactions currently pending for inclusion in the next block(s), as well as the ones that are being scheduled for future execution only.
The result is an object with two fields pending and queued. Each of these fields are associative arrays, in which each entry maps an origin-address to a batch of scheduled transactions. These batches themselves are maps associating nonces with actual transactions.
RPC Method: txpool_content
Signature
pub fn getTxPoolContent(self: *IPC) BasicRequestErrors!RPCResponse(TxPoolContent)
GetTxPoolContentFrom
Retrieves the transactions contained within the txpool, returning pending as well as queued transactions of this address, grouped by nonce
RPC Method: txpool_contentFrom
Signature
pub fn getTxPoolContentFrom(self: *IPC, from: Address) BasicRequestErrors!RPCResponse([]const PoolTransactionByNonce)
GetTxPoolInspectStatus
The inspect inspection property can be queried to list a textual summary of all the transactions currently pending for inclusion in the next block(s), as well as the ones that are being scheduled for future execution only. This is a method specifically tailored to developers to quickly see the transactions in the pool and find any potential issues.
RPC Method: txpool_inspect
Signature
pub fn getTxPoolInspectStatus(self: *IPC) BasicRequestErrors!RPCResponse(TxPoolInspect)
GetTxPoolStatus
The status inspection property can be queried for the number of transactions currently pending for inclusion in the next block(s), as well as the ones that are being scheduled for future execution only.
RPC Method: txpool_status
Signature
pub fn getTxPoolStatus(self: *IPC) BasicRequestErrors!RPCResponse(TxPoolStatus)
GetUncleByBlockHashAndIndex
Returns information about a uncle of a block by hash and uncle index position.
RPC Method: eth_getUncleByBlockHashAndIndex
Signature
pub fn getUncleByBlockHashAndIndex(self: *IPC, block_hash: Hash, index: usize) (BasicRequestErrors || error{InvalidBlockHashOrIndex})!RPCResponse(Block)
GetUncleByBlockHashAndIndexType
Returns information about a uncle of a block by hash and uncle index position.
Use this if the provided block type doesnt fit the expected object that it's returned from the endpoint and you know exactly the shape that the data will be in.
RPC Method: eth_getUncleByBlockHashAndIndex
Signature
pub fn getUncleByBlockHashAndIndexType(
self: *IPC,
comptime T: type,
block_hash: Hash,
index: usize,
) (BasicRequestErrors || error{InvalidBlockHashOrIndex})!RPCResponse(T)
GetUncleByBlockNumberAndIndex
Returns information about a uncle of a block by number and uncle index position.
RPC Method: eth_getUncleByBlockNumberAndIndex
Signature
pub fn getUncleByBlockNumberAndIndex(
self: *IPC,
opts: BlockNumberRequest,
index: usize,
) (BasicRequestErrors || error{InvalidBlockNumberOrIndex})!RPCResponse(Block)
GetUncleByBlockNumberAndIndexType
Returns information about a uncle of a block by number and uncle index position.
Use this if the provided block type doesnt fit the expected object that it's returned from the endpoint and you know exactly the shape that the data will be in.
RPC Method: eth_getUncleByBlockNumberAndIndex
Signature
pub fn getUncleByBlockNumberAndIndexType(
self: *IPC,
comptime T: type,
opts: BlockNumberRequest,
index: usize,
) (BasicRequestErrors || error{InvalidBlockNumberOrIndex})!RPCResponse(T)
GetUncleCountByBlockHash
Returns the number of uncles in a block from a block matching the given block hash.
RPC Method: eth_getUncleCountByBlockHash
Signature
pub fn getUncleCountByBlockHash(self: *IPC, block_hash: Hash) BasicRequestErrors!RPCResponse(usize)
GetUncleCountByBlockNumber
Returns the number of uncles in a block from a block matching the given block number.
RPC Method: eth_getUncleCountByBlockNumber
Signature
pub fn getUncleCountByBlockNumber(self: *IPC, opts: BlockNumberRequest) BasicRequestErrors!RPCResponse(usize)
Multicall3
Runs the selected multicall3 contracts.
This enables to read from multiple contract by a single eth_call
.
Uses the contracts created here
To learn more about the multicall contract please go here
You will need to decoded each of the Result
.
const supply: Function = .{
.type = .function,
.name = "totalSupply",
.stateMutability = .view,
.inputs = &.{},
.outputs = &.{.{ .type = .{ .uint = 256 }, .name = "supply" }},
};
const balance: Function = .{
.type = .function,
.name = "balanceOf",
.stateMutability = .view,
.inputs = &.{.{ .type = .{ .address = {} }, .name = "balanceOf" }},
.outputs = &.{.{ .type = .{ .uint = 256 }, .name = "supply" }},
};
const a: []const MulticallTargets = &.{
.{ .function = supply, .target_address = comptime utils.addressToBytes("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48") catch unreachable },
.{ .function = balance, .target_address = comptime utils.addressToBytes("0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48") catch unreachable },
};
const res = try client.multicall3(a, .{ {}, .{try utils.addressToBytes("0xFded38DF0180039867E54EBdec2012D534862cE3")} }, true);
defer res.deinit();
Signature
pub fn multicall3(
self: *IPC,
comptime targets: []const MulticallTargets,
function_arguments: MulticallArguments(targets),
allow_failure: bool,
) Multicall(.ipc).Error!AbiDecoded([]const Result)
NewBlockFilter
Creates a filter in the node, to notify when a new block arrives.
To check if the state has changed, call getFilterOrLogChanges
.
RPC Method: eth_newBlockFilter
Signature
pub fn newBlockFilter(self: *IPC) BasicRequestErrors!RPCResponse(u128)
NewLogFilter
Creates a filter object, based on filter options, to notify when the state changes (logs).
To check if the state has changed, call getFilterOrLogChanges
.
RPC Method: eth_newFilter
Signature
pub fn newLogFilter(self: *IPC, opts: LogRequest, tag: ?BalanceBlockTag) BasicRequestErrors!RPCResponse(u128)
NewPendingTransactionFilter
Creates a filter in the node, to notify when new pending transactions arrive.
To check if the state has changed, call getFilterOrLogChanges
.
RPC Method: eth_newPendingTransactionFilter
Signature
pub fn newPendingTransactionFilter(self: *IPC) BasicRequestErrors!RPCResponse(u128)
ReadLoop
Creates a read loop to read the socket messages. If a message is too long it will double the buffer size to read the message.
Signature
pub fn readLoop(self: *IPC) ReadLoopErrors!void
ReadLoopOwnedThread
Function prepared to start the read loop in a seperate thread.
Signature
pub fn readLoopOwnedThread(self: *IPC) void
ParseSubscriptionEvent
Parses a subscription event Value
into T
.
Usefull for events that currently zabi doesn't have custom support.
Signature
pub fn parseSubscriptionEvent(self: *IPC, comptime T: type) ParseFromValueError!RPCResponse(EthereumSubscribeResponse(T))
SendEthCall
Executes a new message call immediately without creating a transaction on the block chain. Often used for executing read-only smart contract functions, for example the balanceOf for an ERC-20 contract.
Call object must be prefilled before hand. Including the data field. This will just make the request to the network.
RPC Method: eth_call
Signature
pub fn sendEthCall(self: *IPC, call_object: EthCall, opts: BlockNumberRequest) BasicRequestErrors!RPCResponse(Hex)
SendRawTransaction
Creates new message call transaction or a contract creation for signed transactions. Transaction must be serialized and signed before hand.
RPC Method: eth_sendRawTransaction
Signature
pub fn sendRawTransaction(self: *IPC, serialized_tx: Hex) BasicRequestErrors!RPCResponse(Hash)
SendRpcRequest
Writes message to websocket server and parses the reponse from it. This blocks until it gets the response back from the server.
Signature
pub fn sendRpcRequest(self: *IPC, comptime T: type, message: []u8) SendRpcRequestErrors!RPCResponse(T)
UninstallFilter
Uninstalls a filter with given id. Should always be called when watch is no longer needed.
Additionally Filters timeout when they aren't requested with getFilterOrLogChanges
for a period of time.
RPC Method: eth_uninstallFilter
Signature
pub fn uninstallFilter(self: *IPC, id: usize) BasicRequestErrors!RPCResponse(bool)
Unsubscribe
Unsubscribe from different Ethereum event types with a regular RPC call with eth_unsubscribe as the method and the subscriptionId as the first parameter.
RPC Method: eth_unsubscribe
Signature
pub fn unsubscribe(self: *IPC, sub_id: u128) BasicRequestErrors!RPCResponse(bool)
WatchNewBlocks
Emits new blocks that are added to the blockchain.
RPC Method: eth_subscribe
Signature
pub fn watchNewBlocks(self: *IPC) BasicRequestErrors!RPCResponse(u128)
WatchLogs
Emits logs attached to a new block that match certain topic filters and address.
RPC Method: eth_subscribe
Signature
pub fn watchLogs(self: *IPC, opts: WatchLogsRequest) BasicRequestErrors!RPCResponse(u128)
WatchTransactions
Emits transaction hashes that are sent to the network and marked as "pending".
RPC Method: eth_subscribe
Signature
pub fn watchTransactions(self: *IPC) BasicRequestErrors!RPCResponse(u128)
WatchWebsocketEvent
Creates a new subscription for desired events. Sends data as soon as it occurs
This expects the method to be a valid websocket subscription method. Since we have no way of knowing all possible or custom RPC methods that nodes can provide.
Returns the subscription Id.
Signature
pub fn watchWebsocketEvent(self: *IPC, method: []const u8) BasicRequestErrors!RPCResponse(u128)
WaitForTransactionReceipt
Waits until a transaction gets mined and the receipt can be grabbed.
This is retry based on either the amount of confirmations
given.
If 0 confirmations are given the transaction receipt can be null in case the transaction has not been mined yet. It's recommened to have atleast one confirmation because some nodes might be slower to sync.
RPC Method: eth_getTransactionReceipt
Signature
pub fn waitForTransactionReceipt(self: *IPC, tx_hash: Hash, confirmations: u8) (BasicRequestErrors || ParseFromValueError || error{
TransactionNotFound,
TransactionReceiptNotFound,
FailedToGetReceipt,
FailedToUnsubscribe,
InvalidBlockNumber,
})!RPCResponse(TransactionReceipt)
WaitForTransactionReceiptType
Waits until a transaction gets mined and the receipt can be grabbed.
This is retry based on either the amount of confirmations
given.
If 0 confirmations are given the transaction receipt can be null in case the transaction has not been mined yet. It's recommened to have atleast one confirmation because some nodes might be slower to sync.
Use this if the provided block type doesnt fit the expected object that it's returned from the endpoint and you know exactly the shape that the data will be in.
RPC Method: eth_getTransactionReceipt
Signature
pub fn waitForTransactionReceiptType(self: *IPC, comptime T: type, tx_hash: Hash, confirmations: u8) (BasicRequestErrors || ParseFromValueError || error{
TransactionReceiptNotFound,
TransactionNotFound,
FailedToGetReceipt,
FailedToUnsubscribe,
InvalidBlockNumber,
})!RPCResponse(T)
WriteSocketMessage
Write messages to the websocket server.
Signature
pub fn writeSocketMessage(self: *IPC, data: []u8) !void