Skip to content

Commit

Permalink
Re-add listen to events how-to to SDK
Browse files Browse the repository at this point in the history
  • Loading branch information
lucas-tortora authored Sep 1, 2023
1 parent 8cbe75f commit 8a95d39
Show file tree
Hide file tree
Showing 4 changed files with 192 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
:::warning Unlock Conditions

Outputs may have multiple [UnlockConditions](https://wiki.iota.org/shimmer/tips/tips/TIP-0018/#unlock-conditions), which may require [returning some or all of the transferred amount](https://wiki.iota.org/shimmer/tips/tips/TIP-0018/#storage-deposit-return-unlock-condition). The outputs could also [expire if not claimed in time](https://wiki.iota.org/shimmer/tips/tips/TIP-0018/#expiration-unlock-condition), or may not be [unlockable for a predefined period](https://wiki.iota.org/shimmer/tips/tips/TIP-0018/#timelock-unlock-condition).

Outputs may have multiple [UnlockConditions](https://wiki.iota.org/shimmer/tips/tips/TIP-0018/#unlock-conditions), which may require [returning some or all of the transferred amount](https://wiki.iota.org/shimmer/tips/tips/TIP-0018/#storage-deposit-return-unlock-condition). The outputs could also [expire if not claimed in time](https://wiki.iota.org/shimmer/tips/tips/TIP-0018/#expiration-unlock-condition) or may not be [unlockable for a predefined period](https://wiki.iota.org/shimmer/tips/tips/TIP-0018/#timelock-unlock-condition).
To get outputs with only the [`AddressUnlockCondition`](https://wiki.iota.org/shimmer/tips/tips/TIP-0018/#address-unlock-condition), you should synchronize with the option `syncOnlyMostBasicOutputs: true`.

If you are synchronizing outputs with other unlock conditions, you should check the unlock conditions carefully before crediting users any balance.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ This guide will show you how to list all the transactions of all the addresses o

:::tip Sync Options

If you want to list incoming transactions you need to specify that in your `sync` call.
If you want to list incoming transactions, you need to specify that in your `sync` call.
Transactions for outputs that you synced before with other sync options, will not be requested later.
Also, only transactions that weren't pruned on the point of syncing will be listed.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
---
title: Listen To Events
description: 'How to listen to events using the IOTA SDK.'
image: /img/logo/iota_mark_light.png
keywords:
- how to
- listen
- events
- listen to events
- get outputs
- get transactions
- nodejs
- python
- rust
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import WarningUnlockConditions from '../../_admonitions/_warning-unlock-conditions.md';

Listening to events in an application is essential for real-time data updates and a seamless user experience. By
subscribing to events, such as transfers, deposits, or withdrawals, you can trigger a callback as soon as the event occurs.

<WarningUnlockConditions />

## Example Code

<Tabs groupId="language" queryString>
<TabItem value="rust" label="Rust">

1. Instantiate a [`Wallet`](https://docs.rs/iota-sdk/latest/iota_sdk/wallet/core/struct.Wallet.html).

<div className={'hide-code-block-extras'}>

```rust reference
https://github.com/iotaledger/iota-sdk/blob/develop/sdk/examples/wallet/events.rs#L38-L44
```

</div>

2. Use the `Wallet` instance to listen to events with the
[`Wallet.listen()`](https://docs.rs/iota-sdk/latest/iota_sdk/wallet/core/struct.WalletInner.html#method.listen) function.
You can listen for a specific
[`WalletEventType`](https://docs.rs/iota-sdk/latest/iota_sdk/wallet/events/types/enum.WalletEventType.html).

<div className={'hide-code-block-extras'}>

```rust reference
https://github.com/iotaledger/iota-sdk/blob/develop/sdk/examples/wallet/events.rs#L46-L50
```

</div>

</TabItem>
<TabItem value="typescript-node" label="Typescript (Node.js)">

1. Instantiate a [`Wallet`](../../references/nodejs/classes/Wallet.md).

<div className={'hide-code-block-extras'}>

```typescript reference
https://github.com/iotaledger/iota-sdk/blob/develop/bindings/nodejs/examples/exchange/4-listen-events.ts#L21-L23
```

</div>

2. Define a callback.

<div className={'hide-code-block-extras'}>

```typescript reference
https://github.com/iotaledger/iota-sdk/blob/develop/bindings/nodejs/examples/exchange/4-listen-events.ts#L25-L31
```

</div>

3. Use the `Wallet` instance to listen to events with the
[`Wallet.listen()`](../../references/nodejs/classes/Wallet.md#listen) function. You can listen for a specific
[`WalletEventType`](../../references/nodejs/enums/WalletEventType.md), in this case,
[`WalletEventType.NewOutput`](../../references/nodejs/enums/WalletEventType.md#newoutput).

<div className={'hide-code-block-extras'}>

```typescript reference
https://github.com/iotaledger/iota-sdk/blob/develop/bindings/nodejs/examples/exchange/4-listen-events.ts#L34
```

</div>

</TabItem>
<TabItem value="python" label="Python">

1. Instantiate a [`wallet`](../../references/python/iota_sdk/wallet/wallet.md).

<div className={'hide-code-block-extras'}>

```python reference
https://github.com/iotaledger/iota-sdk/blob/develop/bindings/python/examples/exchange/4_listen_events.py#L19
```

</div>

2. Define a callback.

<div className={'hide-code-block-extras'}>

```python reference
https://github.com/iotaledger/iota-sdk/blob/develop/bindings/python/examples/exchange/4_listen_events.py#L26-L33
```

</div>

3. Use the `wallet` instance to listen to events with the
[`wallet.listen()`](../../references/python/iota_sdk/wallet/wallet.md#listen) function. You can listen for a specific
[`WalletEventType`](../../references/python/iota_sdk/types/event.md), in this case, `WalletEventType.NewOutput`.

<div className={'hide-code-block-extras'}>

```python reference
https://github.com/iotaledger/iota-sdk/blob/develop/bindings/python/examples/exchange/4_listen_events.py#L37
```

</div>

</TabItem>

</Tabs>

### Full Example Code

<Tabs groupId="language" queryString>
<TabItem value="rust" label="Rust">

```rust reference
https://github.com/iotaledger/iota-sdk/blob/develop/sdk/examples/wallet/events.rs
```

</TabItem>
<TabItem value="typescript-node" label="Typescript (Node.js)">

```typescript reference
https://github.com/iotaledger/iota-sdk/blob/develop/bindings/nodejs/examples/exchange/4-listen-events.ts
```

</TabItem>
<TabItem value="python" label="Python">

```python reference
https://github.com/iotaledger/iota-sdk/blob/develop/bindings/python/examples/exchange/4_listen_events.py
```

</TabItem>

</Tabs>

### Expected Output

```js
AccountIndex: 0
Event: {
type: 2,
output: {
outputId: '0x581f43218322d742c0ba1f0d738d6afbc9beaaf4c47f439ab048766b25843f920100',
metadata: {
blockId: '0x7fdf4079802bd00d022cc382a422491724af6564d31522b7f34133d119b7979d',
transactionId: '0x581f43218322d742c0ba1f0d738d6afbc9beaaf4c47f439ab048766b25843f92',
outputIndex: 1,
isSpent: false,
milestoneIndexBooked: 6316391,
milestoneTimestampBooked: 1690125643,
ledgerIndex: 6450179
},
output: {
type: 3,
amount: '3043981300',
nativeTokens: [Array],
unlockConditions: [Array]
},
isSpent: false,
address: {
type: 0,
pubKeyHash: '0x194eb32b9b6c61207192c7073562a0b3adf50a7c1f268182b552ec8999380acb'
},
networkId: '1856588631910923207',
remainder: false,
chain: { coinType: 4218, account: 0, change: 0, addressIndex: 0 }
}
}
```
1 change: 1 addition & 0 deletions docs/build/iota-sdk/1.0.0/sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ module.exports = {
'how-tos/accounts-and-addresses/list-transactions',
'how-tos/accounts-and-addresses/list-outputs',
'how-tos/accounts-and-addresses/consolidate-outputs',
'how-tos/accounts-and-addresses/listen-to-events',
],
},
{
Expand Down

0 comments on commit 8a95d39

Please sign in to comment.