Skip to content

Commit

Permalink
fix eventutil (#146)
Browse files Browse the repository at this point in the history
  • Loading branch information
WGB5445 authored and sanlee42 committed Mar 22, 2023
1 parent 5f8ce44 commit 1d3bbbc
Show file tree
Hide file tree
Showing 6 changed files with 216 additions and 1 deletion.
5 changes: 4 additions & 1 deletion build/StarcoinFramework/BuildInfo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ compiled_package_info:
? address: "0x00000000000000000000000000000001"
name: Event
: StarcoinFramework
? address: "0x00000000000000000000000000000001"
name: EventUtil
: StarcoinFramework
? address: "0x00000000000000000000000000000001"
name: FixedPoint32
: StarcoinFramework
Expand Down Expand Up @@ -264,7 +267,7 @@ compiled_package_info:
? address: "0x00000000000000000000000000000001"
name: YieldFarmingV2
: StarcoinFramework
source_digest: 2317458930368CCF368CBFCFD2A2D84B74B03521306A30839C2CFFA9D0DCF89E
source_digest: 292D789D77E5CCC4DC7A710845C6751F5308EBD27AECB68680A2DF92F7A057F6
build_flags:
dev_mode: false
test_mode: false
Expand Down
Binary file not shown.
175 changes: 175 additions & 0 deletions build/StarcoinFramework/docs/EventUtil.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@

<a name="0x1_EventUtil"></a>

# Module `0x1::EventUtil`



- [Resource `EventHandleWrapper`](#0x1_EventUtil_EventHandleWrapper)
- [Constants](#@Constants_0)
- [Function `init_event`](#0x1_EventUtil_init_event)
- [Function `uninit_event`](#0x1_EventUtil_uninit_event)
- [Function `emit_event`](#0x1_EventUtil_emit_event)
- [Function `exist_event`](#0x1_EventUtil_exist_event)


<pre><code><b>use</b> <a href="Errors.md#0x1_Errors">0x1::Errors</a>;
<b>use</b> <a href="Event.md#0x1_Event">0x1::Event</a>;
<b>use</b> <a href="Signer.md#0x1_Signer">0x1::Signer</a>;
</code></pre>



<a name="0x1_EventUtil_EventHandleWrapper"></a>

## Resource `EventHandleWrapper`



<pre><code><b>struct</b> <a href="EventUtil.md#0x1_EventUtil_EventHandleWrapper">EventHandleWrapper</a>&lt;EventT: drop, store&gt; <b>has</b> key
</code></pre>



<details>
<summary>Fields</summary>


<dl>
<dt>
<code>handle: <a href="Event.md#0x1_Event_EventHandle">Event::EventHandle</a>&lt;EventT&gt;</code>
</dt>
<dd>

</dd>
</dl>


</details>

<a name="@Constants_0"></a>

## Constants


<a name="0x1_EventUtil_ERR_INIT_REPEATE"></a>



<pre><code><b>const</b> <a href="EventUtil.md#0x1_EventUtil_ERR_INIT_REPEATE">ERR_INIT_REPEATE</a>: u64 = 101;
</code></pre>



<a name="0x1_EventUtil_ERR_RESOURCE_NOT_EXISTS"></a>



<pre><code><b>const</b> <a href="EventUtil.md#0x1_EventUtil_ERR_RESOURCE_NOT_EXISTS">ERR_RESOURCE_NOT_EXISTS</a>: u64 = 102;
</code></pre>



<a name="0x1_EventUtil_init_event"></a>

## Function `init_event`



<pre><code><b>public</b> <b>fun</b> <a href="EventUtil.md#0x1_EventUtil_init_event">init_event</a>&lt;EventT: drop, store&gt;(sender: &signer)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="EventUtil.md#0x1_EventUtil_init_event">init_event</a>&lt;EventT: store + drop&gt;(sender: &signer) {
<b>let</b> broker = <a href="Signer.md#0x1_Signer_address_of">Signer::address_of</a>(sender);
<b>assert</b>!(!<b>exists</b>&lt;<a href="EventUtil.md#0x1_EventUtil_EventHandleWrapper">EventHandleWrapper</a>&lt;EventT&gt;&gt;(broker), <a href="Errors.md#0x1_Errors_invalid_state">Errors::invalid_state</a>(<a href="EventUtil.md#0x1_EventUtil_ERR_INIT_REPEATE">ERR_INIT_REPEATE</a>));
<b>move_to</b>(sender, <a href="EventUtil.md#0x1_EventUtil_EventHandleWrapper">EventHandleWrapper</a>&lt;EventT&gt; {
handle: <a href="Event.md#0x1_Event_new_event_handle">Event::new_event_handle</a>&lt;EventT&gt;(sender)
});
}
</code></pre>



</details>

<a name="0x1_EventUtil_uninit_event"></a>

## Function `uninit_event`



<pre><code><b>public</b> <b>fun</b> <a href="EventUtil.md#0x1_EventUtil_uninit_event">uninit_event</a>&lt;EventT: drop, store&gt;(sender: &signer)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="EventUtil.md#0x1_EventUtil_uninit_event">uninit_event</a>&lt;EventT: store + drop&gt;(sender: &signer) <b>acquires</b> <a href="EventUtil.md#0x1_EventUtil_EventHandleWrapper">EventHandleWrapper</a> {
<b>let</b> broker = <a href="Signer.md#0x1_Signer_address_of">Signer::address_of</a>(sender);
<b>assert</b>!(<b>exists</b>&lt;<a href="EventUtil.md#0x1_EventUtil_EventHandleWrapper">EventHandleWrapper</a>&lt;EventT&gt;&gt;(broker), <a href="Errors.md#0x1_Errors_invalid_state">Errors::invalid_state</a>(<a href="EventUtil.md#0x1_EventUtil_ERR_RESOURCE_NOT_EXISTS">ERR_RESOURCE_NOT_EXISTS</a>));
<b>let</b> <a href="EventUtil.md#0x1_EventUtil_EventHandleWrapper">EventHandleWrapper</a>&lt;EventT&gt; { handle } = <b>move_from</b>&lt;<a href="EventUtil.md#0x1_EventUtil_EventHandleWrapper">EventHandleWrapper</a>&lt;EventT&gt;&gt;(broker);
<a href="Event.md#0x1_Event_destroy_handle">Event::destroy_handle</a>&lt;EventT&gt;(handle);
}
</code></pre>



</details>

<a name="0x1_EventUtil_emit_event"></a>

## Function `emit_event`



<pre><code><b>public</b> <b>fun</b> <a href="EventUtil.md#0x1_EventUtil_emit_event">emit_event</a>&lt;EventT: drop, store&gt;(broker: <b>address</b>, event: EventT)
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="EventUtil.md#0x1_EventUtil_emit_event">emit_event</a>&lt;EventT: store + drop&gt;(broker: <b>address</b>, event: EventT) <b>acquires</b> <a href="EventUtil.md#0x1_EventUtil_EventHandleWrapper">EventHandleWrapper</a> {
<b>let</b> event_handle = <b>borrow_global_mut</b>&lt;<a href="EventUtil.md#0x1_EventUtil_EventHandleWrapper">EventHandleWrapper</a>&lt;EventT&gt;&gt;(broker);
<a href="Event.md#0x1_Event_emit_event">Event::emit_event</a>(&<b>mut</b> event_handle.handle, event);
}
</code></pre>



</details>

<a name="0x1_EventUtil_exist_event"></a>

## Function `exist_event`



<pre><code><b>public</b> <b>fun</b> <a href="EventUtil.md#0x1_EventUtil_exist_event">exist_event</a>&lt;EventT: drop, store&gt;(broker: <b>address</b>): bool
</code></pre>



<details>
<summary>Implementation</summary>


<pre><code><b>public</b> <b>fun</b> <a href="EventUtil.md#0x1_EventUtil_exist_event">exist_event</a>&lt;EventT: store + drop&gt;(broker: <b>address</b>): bool {
<b>exists</b>&lt;<a href="EventUtil.md#0x1_EventUtil_EventHandleWrapper">EventHandleWrapper</a>&lt;EventT&gt;&gt;(broker)
}
</code></pre>



</details>
1 change: 1 addition & 0 deletions build/StarcoinFramework/docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ This is the root document for the Move StarcoinFramework module documentation. T
- [`0x1::Epoch`](Epoch.md#0x1_Epoch)
- [`0x1::Errors`](Errors.md#0x1_Errors)
- [`0x1::Event`](Event.md#0x1_Event)
- [`0x1::EventUtil`](EventUtil.md#0x1_EventUtil)
- [`0x1::FixedPoint32`](FixedPoint32.md#0x1_FixedPoint32)
- [`0x1::Genesis`](Genesis.md#0x1_Genesis)
- [`0x1::GenesisNFT`](GenesisNFT.md#0x1_GenesisNFT)
Expand Down
Binary file not shown.
36 changes: 36 additions & 0 deletions sources/EventUtil.move
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
module StarcoinFramework::EventUtil {
use StarcoinFramework::Event;
use StarcoinFramework::Signer;
use StarcoinFramework::Errors;

const ERR_INIT_REPEATE: u64 = 101;
const ERR_RESOURCE_NOT_EXISTS: u64 = 102;

struct EventHandleWrapper<phantom EventT: store + drop> has key {
handle: Event::EventHandle<EventT>,
}

public fun init_event<EventT: store + drop>(sender: &signer) {
let broker = Signer::address_of(sender);
assert!(!exists<EventHandleWrapper<EventT>>(broker), Errors::invalid_state(ERR_INIT_REPEATE));
move_to(sender, EventHandleWrapper<EventT> {
handle: Event::new_event_handle<EventT>(sender)
});
}

public fun uninit_event<EventT: store + drop>(sender: &signer) acquires EventHandleWrapper {
let broker = Signer::address_of(sender);
assert!(exists<EventHandleWrapper<EventT>>(broker), Errors::invalid_state(ERR_RESOURCE_NOT_EXISTS));
let EventHandleWrapper<EventT> { handle } = move_from<EventHandleWrapper<EventT>>(broker);
Event::destroy_handle<EventT>(handle);
}

public fun emit_event<EventT: store + drop>(broker: address, event: EventT) acquires EventHandleWrapper {
let event_handle = borrow_global_mut<EventHandleWrapper<EventT>>(broker);
Event::emit_event(&mut event_handle.handle, event);
}

public fun exist_event<EventT: store + drop>(broker: address): bool {
exists<EventHandleWrapper<EventT>>(broker)
}
}

0 comments on commit 1d3bbbc

Please sign in to comment.