Skip to content

API Reference

Facades Overview

FacadeUnderlying ContractPurpose
EvmContractClientRead & write contract functions
EvmRpcRpcClientRaw JSON-RPC calls & health snapshot
EvmSignerSignerAccess signing address & key (private key usage)
EvmNonceNonceManagerTrack last used nonce locally
EvmFeesFeePolicySuggest & bump EIP-1559 fees
EvmLogsLogFilterBuilderQuery & filter event logs

ContractClient (via Evm)

MethodArgsReturnsNotes
at(address, abi)string, array| stringselfSet target contract & ABI JSON/array
call(fn, args=[])string, arrayCallResult| mixedeth_call; hex wrapped for decoding
sendAsync(fn, args=[], opts=[])string, array, arraystringDispatch async job; returns request UUID
wait(txHash, timeoutSec=120, pollMs=800)string, int, intarray| nullPoll receipt until mined/timeout
estimateGas(data, from?)string, ?stringintUses eth_estimateGas + padding

CallResult

MethodReturnsDescription
raw()stringOriginal 0x hex
as(type)mixedDecode basic ABI types (string, bytes, uint256/uint, int256/int, bool, address)
__toString()stringRaw hex when cast to string

RpcClient (via EvmRpc)

MethodArgsReturnsNotes
call(method, params=[])string, arraymixedGeneric JSON-RPC request
health()-['chainId'=>int,'block'=>int]Convenience status snapshot

Signer (via EvmSigner)

MethodReturnsNotes
getAddress()stringPublic address derived from private key
privateKey()stringHex private key (handle securely)

NonceManager (via EvmNonce)

MethodArgsReturnsNotes
last()-`intnull`
remember(nonce)intvoidStore nonce after use

FeePolicy (via EvmFees)

MethodArgsReturnsNotes
suggest()-['maxFeePerGas'=>string,'maxPriorityFeePerGas'=>string]Initial fee suggestion
bump(previous, attempt)array, intarrayAdjust fees for replacement

LogFilterBuilder (via EvmLogs)

Start with EvmLogs::query() then chain:

MethodArgsReturnsPurpose
fromBlock(block)int| stringselfSet starting block or 'latest'
toBlock(block)int| stringselfSet end block or 'latest'
address(addrOrArray)string| arrayselfFilter by one or many contract addresses
event(signature)stringselfSet topic0 = keccak256(signature)
eventByAbi(abiJson, name)array| string, stringselfResolve signature from ABI by function name
topic(index, value)int, stringselfExact match indexed topic
topicAny(index, values)int, arrayselfOR match on multiple values
topicWildcard(index)intselfUnset filter for that indexed slot
get()-arrayFetch raw logs array

Helpers:

HelperArgsReturnsDescription
padAddress(address)stringstringLeft-pad address to 32-byte topic value
decodeEvent(abiJson, log)array|string, arrayarrayDecode indexed + non-indexed params

Encoding Helpers

ClassMethodReturnsUse Case
EncodingstringToBytes32(str)stringConvert UTF-8 string to bytes32 padded hex

Events

EventWhenKey Data
TxQueuedJob pushedrequest_id, function, address
TxBroadcastedFirst broadcast oktx_hash, nonce, fees
TxReplacedFee bump broadcastold_tx_hash, new_tx_hash, attempt
TxMinedReceipt foundtx_hash, receipt
TxFailedTerminal failurereason, attempts
CallPerformedRead executedfrom, to, function, raw_result

Configuration Highlights (config/evm.php)

SectionKeyPurpose
rpc_urlslistFailover endpoints
chain_idintNetwork id (EIP-155)
signer.private_keyhexSigning key
tx.estimate_paddingfloatGas safety multiplier
tx.confirm_timeoutintSeconds before considering replacement
tx.max_replacementsintFee bump attempts limit
tx.poll_interval_msintReceipt poll interval
tx.queuestringQueue name for sendAsync jobs

Worker Recommendation

Run one worker per signing key:

bash
php artisan queue:work --queue=evm-send --sleep=0

Maintains nonce ordering; for scaling use a distributed nonce manager.


Error Classes

ClassTriggerTypical Cause
RpcExceptionRPC call failsNetwork / endpoint error
GasExceptionGas estimation failureRevert, invalid data
SignerExceptionSigning issueBad key / chain mismatch

Security Notes

  • Never log private keys.
  • Limit queue concurrency.
  • Use multiple RPC endpoints for resilience.

Released under the MIT License.