Skip to content

Instantly share code, notes, and snippets.

@svanas
Last active December 18, 2023 12:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save svanas/6720d8b55168610e9ba84145d020ccdd to your computer and use it in GitHub Desktop.
Save svanas/6720d8b55168610e9ba84145d020ccdd to your computer and use it in GitHub Desktop.
Listen on Blocknative's mempool WebSocket API
uses
// Delphi
System.Classes,
System.JSON,
System.UITypes,
// FireMonkey
FMX.Controls,
FMX.Controls.Presentation,
FMX.Dialogs,
FMX.Forms,
FMX.Memo,
FMX.Memo.Types,
FMX.ScrollBox,
FMX.StdCtrls,
FMX.Types,
// web3
web3,
web3.eth.blocknative.mempool,
web3.eth.blocknative.mempool.sgc;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
Mempool: IMempool;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
Mempool := TSgcMempool.Subscribe(
Ethereum, // ethereum main net
TProxy.Disabled, // no proxy server
'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', // your blocknative API key
'0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // address to watch
procedure(event: TJsonObject; err: IError) // continuous events (or a blocknative error)
begin
var tx := web3.eth.blocknative.mempool.getTransaction(event);
if Assigned(tx) then
TThread.Synchronize(nil, procedure
begin
Memo1.Lines.Add(tx.ToString);
end);
end,
procedure(err: IError) // non-blocknative-error handler (probably a socket error)
begin
TThread.Synchronize(nil, procedure
begin
MessageDlg(err.Message, TMsgDlgType.mtError, [TMsgDlgBtn.mbOK], 0);
end);
end,
procedure
begin
// connection closed
end).Value;
end;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment