Skip to content

Commit 041b378

Browse files
committed
Update contract listener documentation to be clearer
Signed-off-by: Enrique Lacal <[email protected]>
1 parent 88a4c15 commit 041b378

File tree

2 files changed

+98
-6
lines changed

2 files changed

+98
-6
lines changed

doc-site/docs/reference/types/_includes/contractlistener_description.md

Lines changed: 97 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ Each filter is identified by a generated `signature` that matches a single event
4040

4141
Ethereum provides a string standard for event signatures, of the form `EventName(uint256,bytes)`. Prior to v1.3.1, the signature of each Ethereum contract listener would exactly follow this Ethereum format.
4242

43-
As of v1.3.1, Ethereum signature strings have been changed, because this format does not fully describe the event - particularly because each top-level parameter can in the ABI definition be marked as `indexed`. For example, while the following two Solidity events have the same signature, they are serialized differently due to the different placement of `indexed` parameters, and thus a listener must define both individually to be able to process them:
43+
As of v1.3.1, Ethereum format signature strings have been changed in FireFly, because this format does not fully describe the event - particularly because each top-level parameter can in the ABI definition be marked as `indexed`. For example, while the following two Solidity events have the same signature, they are serialized differently due to the different placement of `indexed` parameters, and thus a listener must define both individually to be able to process them:
4444

4545
- ERC-20 `Transfer`
4646

@@ -54,7 +54,7 @@ As of v1.3.1, Ethereum signature strings have been changed, because this format
5454
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
5555
```
5656

57-
The two above are now expressed in the following manner by the Ethereum blockchain connector:
57+
The two above are now expressed in the following manner by the FireFly Ethereum blockchain connector:
5858

5959
```solidity
6060
Transfer(address,address,uint256) [i=0,1]
@@ -65,7 +65,7 @@ The `[i=]` listing at the end of the signature indicates the position of all par
6565

6666
Building on the blockchain-specific signature format for each event, FireFly will then compute the final signature for each filter and each contract listener as follows:
6767

68-
- Each filter signature is a combination of the location and the specific connector event signature, such as `0xa5ea5d0a6b2eaf194716f0cc73981939dca26da1:Changed(address,uint256) [i=0]`
68+
- Each filter signature is a combination of the location and the specific connector event signature, such as `0xa5ea5d0a6b2eaf194716f0cc73981939dca26da1:Transfer(address,address,uint256) [i=0,1]`
6969
- Each contract listener signature is a concatenation of all the filter signatures, separated by `;`
7070

7171
#### Duplicate filters
@@ -84,7 +84,7 @@ As noted above, each listener has a generated signature. This signature - contai
8484

8585
### Backwards compatibility
8686

87-
As noted throughout this document, the behavior of listeners is changed in v1.3.1. However, the following behaviors are retained for backwards-compatibility, to ensure that code written prior to v1.3.1 should continue to function.
87+
As noted throughout this document, the behavior of listeners has changed in v1.3.1. However, the following behaviors are retained for backwards-compatibility, to ensure that code written prior to v1.3.1 should continue to function.
8888

8989
- The response from all query APIs of `listeners` will continue to populate top-level `event` and `location` fields
9090
- The first entry from the `filters` array is duplicated to these fields
@@ -93,12 +93,104 @@ As noted throughout this document, the behavior of listeners is changed in v1.3.
9393
- The `signature` field is preserved at the listener level
9494
- The format has been changed as described above
9595

96-
### Input formats
96+
## Input Examples
9797

9898
The two input formats supported when creating a contract listener are shown below.
9999

100+
### With Event Definition
101+
102+
In these examples, the event schema in the FireFly Interface format is provided describing the event and its parameters. See [FireFly Interface Format](../firefly_interface_format.md)
103+
100104
**Muliple Filters**
105+
```json
106+
{
107+
"filters": [
108+
{
109+
"event": {
110+
"name": "Changed",
111+
"description": "",
112+
"params": [
113+
{
114+
"name": "x",
115+
"schema": {
116+
"type": "integer",
117+
"details": {
118+
"type": "uint256",
119+
"internalType": "uint256"
120+
}
121+
}
122+
}
123+
]
124+
},
125+
"location": {
126+
"address": "0xa5ea5d0a6b2eaf194716f0cc73981939dca26da1"
127+
}
128+
},
129+
{
130+
"event": {
131+
"name": "AnotherEvent",
132+
"description": "",
133+
"params": [
134+
{
135+
"name": "my-field",
136+
"schema": {
137+
"type": "string",
138+
"details": {
139+
"type": "address",
140+
"internalType": "address",
141+
"indexed": true
142+
}
143+
}
144+
}
145+
]
146+
},
147+
"location": {
148+
"address": "0xa4ea5d0b6b2eaf194716f0cc73981939dca27da1"
149+
}
150+
}
151+
],
152+
"options": {
153+
"firstEvent": "newest"
154+
},
155+
"topic": "simple-storage"
156+
}
157+
```
158+
159+
**One filter (old format)**
160+
161+
```json
162+
{
163+
"event": {
164+
"name": "Changed",
165+
"description": "",
166+
"params": [
167+
{
168+
"name": "x",
169+
"schema": {
170+
"type": "integer",
171+
"details": {
172+
"type": "uint256",
173+
"internalType": "uint256"
174+
}
175+
}
176+
}
177+
]
178+
},
179+
"location": {
180+
"address": "0xa5ea5d0a6b2eaf194716f0cc73981939dca26da1"
181+
},
182+
"options": {
183+
"firstEvent": "newest"
184+
},
185+
"topic": "simple-storage"
186+
}
187+
```
188+
189+
### With Interface Reference
101190

191+
These examples use an `interface` reference when creating the filters, the `eventPath` field is used to reference an event defined within the interface provided. See an example of creating a [FireFly Interface](../../tutorials/custom_contracts/ethereum.md/#the-firefly-interface-format) for an EVM smart contract.
192+
193+
**Muliple Filters**
102194
```json
103195
{
104196
"filters": [

doc-site/docs/reference/types/contractlistener.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: ContractListener
33
---
44
{% include-markdown "./_includes/contractlistener_description.md" %}
55

6-
### Example
6+
### Example Response from the API
77

88
```json
99
{

0 commit comments

Comments
 (0)