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=[], payload=null)string, array, array, mixedstringDispatch async job; returns request UUID; payload flows through events
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(callable $gasPriceFetcher)callable $gasPriceFetcher[priorityWei, maxFeeWei]Initial fee suggestion
replace(int $oldPriority, int $oldMax)int $oldPriority, int $oldMax[priorityWei, maxFeeWei]Replacement bump

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 (excerpt)
TxQueuedJob pushedto, data, payload
TxBroadcastedFirst broadcast oktxHash, fields, payload
TxReplacedFee bump broadcastoldTxHash, newFields, attempt, payload
TxMinedReceipt foundtxHash, receipt, payload
TxFailedTerminal failureto, data, reason, payload
CallPerformedRead executedfrom, address, function, rawResult

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.
  • Attach domain payloads to events for traceability.

Released under the MIT License.