diff --git a/Modules/ArbitrumOneMainModule.php b/Modules/ArbitrumOneMainModule.php index 2fbdd97..ae20041 100644 --- a/Modules/ArbitrumOneMainModule.php +++ b/Modules/ArbitrumOneMainModule.php @@ -6,7 +6,7 @@ /* This is the main Arbitrum One module. It requires a geth node to run. */ -final class ArbitrumOneMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class ArbitrumOneMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/AvalancheMainModule.php b/Modules/AvalancheMainModule.php index 5b4258e..bf1a7a0 100644 --- a/Modules/AvalancheMainModule.php +++ b/Modules/AvalancheMainModule.php @@ -6,7 +6,7 @@ /* This is the main Avalanche C-Chain module. It requires a geth node to run. */ -final class AvalancheMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class AvalancheMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/BNBMainModule.php b/Modules/BNBMainModule.php index 7ab8577..e16c4ab 100644 --- a/Modules/BNBMainModule.php +++ b/Modules/BNBMainModule.php @@ -6,7 +6,7 @@ /* This is the main BNB module. It requires either a geth or an Erigon node to run (but the latter is much faster). */ -final class BNBMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class BNBMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/BOBMainModule.php b/Modules/BOBMainModule.php index 4de0ef2..2ad952a 100644 --- a/Modules/BOBMainModule.php +++ b/Modules/BOBMainModule.php @@ -6,7 +6,7 @@ /* This is the main BOB module. It requires a geth node to run. */ -final class BOBMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class BOBMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/BaseMainModule.php b/Modules/BaseMainModule.php index 8c0acb5..cc739ad 100644 --- a/Modules/BaseMainModule.php +++ b/Modules/BaseMainModule.php @@ -6,7 +6,7 @@ /* This is the main Base module. It requires a geth node to run. */ -final class BaseMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class BaseMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/BlastMainModule.php b/Modules/BlastMainModule.php index bd4425f..ef604a6 100644 --- a/Modules/BlastMainModule.php +++ b/Modules/BlastMainModule.php @@ -1,12 +1,12 @@ return(); } + + final function api_broadcast_transaction(string $data): ?string + { + if (!preg_match(StandardPatterns::HexWith0x->value, $data)) + return null; + + $hash = null; + + foreach ($this->nodes as $node) + { + // We're fine here with some nodes being down, so we don't use `requester_multi()` + // which requires for all nodes to be online. + try + { + $this_hash = requester_single($node, params: [ + 'jsonrpc' => '2.0', + 'method' => 'eth_sendRawTransaction', + 'params' => [$data], + 'id' => 0], + timeout: $this->timeout)['result']; + } + catch (Throwable $t) + { + $this_hash = null; + } + + if ($this_hash) + $hash = $this_hash; + } + + return $hash; + } } diff --git a/Modules/EthereumClassicMainModule.php b/Modules/EthereumClassicMainModule.php index c5a6656..b608944 100644 --- a/Modules/EthereumClassicMainModule.php +++ b/Modules/EthereumClassicMainModule.php @@ -8,7 +8,7 @@ * not available on geth for some older transactions when requesting receipts and a special fix is required, * see https://github.com/3xplcom/ethereum-classic */ -final class EthereumClassicMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class EthereumClassicMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/EthereumMainModule.php b/Modules/EthereumMainModule.php index 490a39c..30c4372 100644 --- a/Modules/EthereumMainModule.php +++ b/Modules/EthereumMainModule.php @@ -6,7 +6,7 @@ /* This is the main Ethereum module. It requires either a geth or an Erigon node to run (but the latter is much faster). */ -final class EthereumMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class EthereumMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/FantomMainModule.php b/Modules/FantomMainModule.php index fa8ad2b..a446e9d 100644 --- a/Modules/FantomMainModule.php +++ b/Modules/FantomMainModule.php @@ -6,7 +6,7 @@ /* This is the main Fantom module. It requires a geth node to run. */ -final class FantomMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class FantomMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/GnosisChainMainModule.php b/Modules/GnosisChainMainModule.php index b384092..432d58d 100644 --- a/Modules/GnosisChainMainModule.php +++ b/Modules/GnosisChainMainModule.php @@ -9,7 +9,7 @@ * the created contract address neither in the transaction info, nor in the transaction receipt. That's probably a bug with * Nethermind which is not observed with Erigon. `No address` exception will be thrown for such transactions. */ -final class GnosisChainMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class GnosisChainMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/LineaMainModule.php b/Modules/LineaMainModule.php index a13e0ac..85dfa28 100644 --- a/Modules/LineaMainModule.php +++ b/Modules/LineaMainModule.php @@ -6,7 +6,7 @@ /* This is the main Linea module. It requires a geth node to run. */ -final class LineaMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class LineaMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/OptimismMainModule.php b/Modules/OptimismMainModule.php index f99911c..1bd9392 100644 --- a/Modules/OptimismMainModule.php +++ b/Modules/OptimismMainModule.php @@ -6,7 +6,7 @@ /* This is the main Optimism module. It requires a geth node to run. */ -final class OptimismMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class OptimismMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/PolygonMainModule.php b/Modules/PolygonMainModule.php index 3c115a5..14ca6a9 100644 --- a/Modules/PolygonMainModule.php +++ b/Modules/PolygonMainModule.php @@ -6,7 +6,7 @@ /* This is the main Polygon module. It requires either a geth or an Erigon node to run (but the latter is much faster). */ -final class PolygonMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class PolygonMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/PolygonzkEVMMainModule.php b/Modules/PolygonzkEVMMainModule.php index 8aeb676..def5f7a 100644 --- a/Modules/PolygonzkEVMMainModule.php +++ b/Modules/PolygonzkEVMMainModule.php @@ -6,7 +6,7 @@ /* This is the main Polygon zkEVM module. It requires a geth node to run. */ -final class PolygonzkEVMMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class PolygonzkEVMMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/RootstockMainModule.php b/Modules/RootstockMainModule.php index 0f59e86..14ff9d3 100644 --- a/Modules/RootstockMainModule.php +++ b/Modules/RootstockMainModule.php @@ -6,7 +6,7 @@ /* This is the main Rootstock module. */ -final class RootstockMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class RootstockMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/opBNBMainModule.php b/Modules/opBNBMainModule.php index 1d7922a..99fdea5 100644 --- a/Modules/opBNBMainModule.php +++ b/Modules/opBNBMainModule.php @@ -6,7 +6,7 @@ /* This is the main opBNB module. It requires a geth node to run. */ -final class opBNBMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials +final class opBNBMainModule extends EVMMainModule implements Module, BalanceSpecial, TransactionSpecials, AddressSpecials, BroadcastTransactionSpecial { function initialize() { diff --git a/Modules/zkSyncEraMainModule.php b/Modules/zkSyncEraMainModule.php index 2f3a90b..f29ccf9 100644 --- a/Modules/zkSyncEraMainModule.php +++ b/Modules/zkSyncEraMainModule.php @@ -1,12 +1,12 @@