Skip to content

Commit 7c90489

Browse files
committed
updated websockets documentation
1 parent 907d3da commit 7c90489

File tree

1 file changed

+110
-45
lines changed

1 file changed

+110
-45
lines changed

Documentation/Usage.md

Lines changed: 110 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -31,27 +31,32 @@
3131
- [Send Ether](#send-ether)
3232
- [Send ERC-20 Token](#send-erc-20-token)
3333
- [Write Transaction and call smart contract method](#write-transaction-and-call-smart-contract-method)
34-
- [Read Transaction to call smart contract method](#read-transaction-to-call-smart-contract-method)
35-
- [Other Transaction Types (EIP-1559)](#other-transaction-types)
34+
- [Read Transaction from call smart contract method](#read-transaction-from-call-smart-contract-method)
3635
- [Send Transaction](#send-transaction)
3736
- [Write](#write)
3837
- [Read](#read)
38+
- [Other Transaction Types](#other-transaction-types)
3939
- [Chain state](#chain-state)
4040
- [Get Block number](#get-block-number)
4141
- [Websockets](#websockets)
4242
- [Web3socketDelegate](#web3socketdelegate)
4343
- [Custom Websocket Provider](#custom-websocket-provider)
4444
- [Connect to custom endpoint](#connect-to-custom-endpoint)
45-
- [Send message](#send-message)
45+
- [Send request](#send-request)
4646
- [Infura Websocket interactions](#infura-websocket-interactions)
4747
- [Connect to Infura endpoint](#connect-to-infura-endpoint)
4848
- [Connect to custom Infura-like endpoint](#connect-to-custom-infura-like-endpoint)
4949
- [Set a filter in the node to notify when something happened](#set-a-filter-in-the-node-to-notify-when-something-happened)
50-
- [Get new pending transactions](#get-new-pending-transactions)
50+
- [New filter](#new-filter)
51+
- [Get filter changes](#get-filter-changes)
52+
- [Get filter logs](#get-filter-logs)
53+
- [Uninstall filter](#uninstall-filter)
5154
- [Create a new subscription over particular events](#create-a-new-subscription-over-particular-events)
52-
- [Subscribe on new pending transactions](#subscribe-on-new-pending-transactions)
53-
- [Subscribe on logs](https://github.com/matter-labs/web3swift/blob/develop/Documentation/Usage.md#subscribe-on-logs)
54-
- [Subscribe on new heads](https://github.com/matter-labs/web3swift/blob/develop/Documentation/Usage.md#subscribe-on-new-heads)
55+
- [Subscribe on new pending transactions](#subscribe-on-new-pending-transactions)
56+
- [Subscribe on logs](#subscribe-on-logs)
57+
- [Subscribe on new heads](#subscribe-on-new-heads)
58+
- [Subscribe on syncing](#subscribe-on-syncing)
59+
- [Unsubscribe](#unsubscribe)
5560
- [ENS](#ens)
5661
- [Registry](#registry)
5762
- [Resolver](#resolver)
@@ -402,17 +407,17 @@ let blockNumber = try! web3.eth.getBlockNumber()
402407

403408
### Web3socketDelegate
404409

405-
To receive messages from endpoint you need to create a class that adopts to Web3SocketDelegate protocol.
410+
You can create a class that adopts to Web3SocketDelegate protocol in order to receive notifications about connection state or errors.
406411
Later, to open a connection to WebSocket server, you will use socket provider (`WebsocketProvider` or `InfuraWebsocketProvider`). And we recommend you to make it a property, so it doesn't get deallocated right after being setup.
407412
```swift
408-
class DelegateClass: Web3SocketDelegate {
409-
var socketProvider: WebsocketProvider? = nil // WebSocket Provider
410-
var socketProvider: InfuraWebsocketProvider? = nil // Infura WebSocket Provider
411-
412-
// Protocol method, here will be messages, received from WebSocket server
413-
func received(message: Any) {
414-
// Make something with message
415-
}
413+
public class DelegateClass: Web3SocketDelegate {
414+
public func socketConnected(_ headers: [String : String]) {
415+
// Do something when socket connected
416+
}
417+
418+
public func gotError(error: Error) {
419+
// Do something when got an error from socket connection
420+
}
416421
}
417422
```
418423

@@ -422,7 +427,7 @@ class DelegateClass: Web3SocketDelegate {
422427

423428
You can create WebsocketProvider and connect/disconnect it.
424429
```swift
425-
socketProvider = WebsocketProvider("ws://your.endpoint", delegate: delegate)
430+
let socketProvider = WebsocketProvider("ws://your.endpoint", delegate: delegate, network: .Mainnet)
426431
socketProvider.connectSocket()
427432
/// Some code
428433
/// ...
@@ -431,80 +436,140 @@ socketProvider.disconnectSocket()
431436

432437
Or you can create already connected WebsocketProvider
433438
```swift
434-
socketProvider = WebsocketProvider.connectToSocket("ws://your.endpoint", delegate: delegate)
439+
let socketProvider = WebsocketProvider.connectToSocket("ws://your.endpoint", delegate: delegate, network: .Mainnet)
435440
```
436441

437-
#### Send message
442+
#### Send request
438443

439444
```swift
440-
// String message
441-
socketProvider.writeMessage(String())
442-
// Data message
443-
socketProvider.writeMessage(Data())
445+
// One request
446+
socketProvider.sendAsync(<JSONRPCrequest>, queue: <DispatchQueue>).map { response in
447+
// Use response
448+
}
449+
450+
// A batch of requests
451+
socketProvider.sendAsync(<JSONRPCrequestBatch>, queue: <DispatchQueue>).map { responses in
452+
// Use responses
453+
}
444454
```
445455

446456
### Infura Websocket interactions
447457

448458
#### Connect to Infura endpoint
449459

450460
```swift
451-
socketProvider = InfuraWebsocketProvider.connectToInfuraSocket(.Mainnet, delegate: delegate)
461+
let socketProvider = InfuraWebsocketProvider.connectToInfuraSocket(.Mainnet, delegate: delegate)
452462
```
453463

454464
#### Connect to custom Infura-like endpoint
455465

456466
```swift
457-
socketProvider = InfuraWebsocketProvider.connectToSocket("ws://your.endpoint", delegate: delegate)
467+
let socketProvider = InfuraWebsocketProvider.connectToSocket("ws://your.endpoint", delegate: delegate, network: .Mainnet)
458468
```
459469

460470
#### Set a filter in the node to notify when something happened
461471

462-
To study possible filters read [Infura WSS filters documentation](https://infura.io/docs/ethereum/wss/introduction)
472+
To study possible filters read [Infura WSS filters documentation](https://docs.infura.io/infura/networks/ethereum/json-rpc-methods/filter-methods)
473+
474+
```swift
475+
// Use websocket provider
476+
let eth = web3(provider: socketProvider).eth
477+
```
478+
479+
##### New filter
463480

464481
```swift
465-
// Getting logs
466-
try! socketProvider.setFilterAndGetLogs(method: <InfuraWebsocketMethod>, params: <[Encodable]?>)
467-
// Getting changes
468-
try! socketProvider.setFilterAndGetChanges(method: <InfuraWebsocketMethod>, params: <[Encodable]?>)
482+
// New filter
483+
let filterPromise = eth.newFilterPromise(addresses: <[EthereumAddress]>, topics: <[String]>)
484+
// or
485+
let filterPromise = eth.newFilterPromise(addresses: <[EthereumAddress]>, fromBlock: <BlockNumber?>, toBlock: <BlockNumber?>, topics: <[String]>)
486+
487+
// New block filter
488+
let filterPromise = eth.newBlockFilterPromise()
489+
490+
// New pending transactions filter
491+
let filterPromise = eth.newPendingTransactionFilterPromise()
469492
```
470-
Or you can provide parameters in more convenient way:
493+
494+
##### Get filter changes
495+
471496
```swift
472-
// Getting logs
473-
try! socketProvider.setFilterAndGetLogs(method: <InfuraWebsocketMethod>, address: <EthereumAddress?>, fromBlock: <BlockNumber?>, toBlock: <BlockNumber?>, topics: <[String]?>)
474-
// Getting changes
475-
try! socketProvider.setFilterAndGetChanges(method: <InfuraWebsocketMethod>, address: <EthereumAddress?>, fromBlock: <BlockNumber?>, toBlock: <BlockNumber?>, topics: <[String]?>)
497+
filterPromise.map { filterID in
498+
eth.getFilterChangesPromise(filterID: filterID).map { filterChanges in
499+
// Use filterChanges
500+
}
501+
}
476502
```
477503

478-
#### Get new pending transactions
504+
##### Get filter logs
479505

480506
```swift
481-
try! socketProvider.setFilterAndGetLogs(method: .newPendingTransactionFilter)
507+
filterPromise.map { filterID in
508+
eth.getFilterLogsPromise(filterID: filterID).map { filterLogs in
509+
// Use filterLogs
510+
}
511+
}
512+
```
513+
514+
##### Uninstall filter
515+
516+
```swift
517+
filterPromise.map { filterID in
518+
eth.uninstallFilterPromise(filterID: filterID).map { isUninstalled in
519+
// Use isUninstalled
520+
}
521+
}
482522
```
483523

484524
#### Create a new subscription over particular events
485525

486-
To study possible subscriptions read [Infura WSS subscriptions documentation](https://infura.io/docs/ethereum/wss/eth_subscribe)
526+
To study possible subscriptions read [Infura WSS subscriptions documentation](https://docs.infura.io/infura/networks/ethereum/json-rpc-methods/subscription-methods)
487527

488528
```swift
489-
try! socketProvider.subscribe(params: <[Encodable]>)
529+
// Use websocket provider
530+
let eth = web3(provider: socketProvider).eth
490531
```
491532

492-
#### Subscribe on new pending transactions
533+
##### Subscribe on new pending transactions
493534

494535
```swift
495-
try! socketProvider.subscribeOnNewPendingTransactions()
536+
let subscription = try eth.subscribeOnNewPendingTransactions { result in
537+
let transactionHash = try! result.get()
538+
// Use transactionHash
539+
}
496540
```
497541

498-
#### Subscribe on logs
542+
##### Subscribe on logs
499543

500544
```swift
501-
try! socketProvider.subscribeOnLogs(addresses: <[EthereumAddress]?>, topics: <[String]?>)
545+
let subscription = try eth.subscribeOnLogs { result in
546+
let logItem = try! result.get()
547+
// Use logItem
548+
}
549+
```
550+
551+
##### Subscribe on new heads
552+
553+
```swift
554+
let subscription = try eth.subscribeOnNewHeads { result in
555+
let blockHeader = try! result.get()
556+
// Use blockHeader
557+
}
558+
```
559+
560+
##### Subscribe on syncing
561+
562+
```swift
563+
let subscription = try eth.subscribeOnSyncing { result in
564+
let syncingInfo = try! result.get()
565+
// Use syncingInfo
566+
}
502567
```
503568

504-
#### Subscribe on new heads
569+
##### Unsubscribe
505570

506571
```swift
507-
try! socketProvider.subscribeOnNewHeads()
572+
subscription.unsubscribe()
508573
```
509574

510575
## ENS

0 commit comments

Comments
 (0)