Closed SkymanOne closed 10 months ago
Attention: 62 lines
in your changes are missing coverage. Please review.
Comparison is base (
db5600e
) 53.47% compared to head (c5e5e9f
) 53.60%. Report is 11 commits behind head on master.
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
These are the results when building the integration-tests/*
contracts from this branch with cargo-contract
and comparing them to ink! master
:
Contract | Upstream Size (kB) | PR Size (kB) | Diff (kB) | Diff (%) | Change |
---|---|---|---|---|---|
basic-contract-caller | 3.207 | 3.207 | 0 | 0 | :heavy_minus_sign: |
basic-contract-caller/other-contract | 1.581 | 1.581 | 0 | 0 | :heavy_minus_sign: |
call-builder-return-value | 8.904 | 8.904 | 0 | 0 | :heavy_minus_sign: |
call-runtime | 2.013 | 2.013 | 0 | 0 | :heavy_minus_sign: |
conditional-compilation | 1.453 | 1.453 | 0 | 0 | :heavy_minus_sign: |
contract-storage | 7.336 | 7.336 | 0 | 0 | :heavy_minus_sign: |
contract-terminate | 1.336 | 1.336 | 0 | 0 | :heavy_minus_sign: |
contract-transfer | 1.693 | 1.693 | 0 | 0 | :heavy_minus_sign: |
custom-allocator | 7.652 | 7.652 | 0 | 0 | :heavy_minus_sign: |
dns | 7.321 | 7.321 | 0 | 0 | :heavy_minus_sign: |
e2e-call-runtime | 1.302 | 1.302 | 0 | 0 | :heavy_minus_sign: |
e2e-runtime-only-backend | 1.879 | 1.879 | 0 | 0 | :heavy_minus_sign: |
erc1155 | 14.123 | 14.123 | 0 | 0 | :heavy_minus_sign: |
erc20 | 6.918 | 6.918 | 0 | 0 | :heavy_minus_sign: |
erc721 | 9.816 | 9.816 | 0 | 0 | :heavy_minus_sign: |
events | 5.264 | 5.264 | 0 | 0 | :heavy_minus_sign: |
flipper | 1.637 | 1.637 | 0 | 0 | :heavy_minus_sign: |
incrementer | 1.504 | 1.504 | 0 | 0 | :heavy_minus_sign: |
lang-err-integration-tests/call-builder-delegate | 2.561 | 2.561 | 0 | 0 | :heavy_minus_sign: |
lang-err-integration-tests/call-builder | 5.087 | 5.087 | 0 | 0 | :heavy_minus_sign: |
lang-err-integration-tests/constructors-return-value | 1.987 | 1.987 | 0 | 0 | :heavy_minus_sign: |
lang-err-integration-tests/contract-ref | 4.568 | 4.568 | 0 | 0 | :heavy_minus_sign: |
lang-err-integration-tests/integration-flipper | 1.815 | 1.815 | 0 | 0 | :heavy_minus_sign: |
lazyvec-integration-test | 4.553 | 4.553 | 0 | 0 | :heavy_minus_sign: |
mapping-integration-tests | 7.919 | 7.919 | 0 | 0 | :heavy_minus_sign: |
mother | 12.756 | 12.756 | 0 | 0 | :heavy_minus_sign: |
multi-contract-caller | 6.155 | 6.155 | 0 | 0 | :heavy_minus_sign: |
multi-contract-caller/accumulator | 1.378 | 1.378 | 0 | 0 | :heavy_minus_sign: |
multi-contract-caller/adder | 1.908 | 1.908 | 0 | 0 | :heavy_minus_sign: |
multi-contract-caller/subber | 1.928 | 1.928 | 0 | 0 | :heavy_minus_sign: |
multisig | 21.621 | 21.621 | 0 | 0 | :heavy_minus_sign: |
payment-channel | 5.653 | 5.653 | 0 | 0 | :heavy_minus_sign: |
sr25519-verification | 1.148 | 1.148 | 0 | 0 | :heavy_minus_sign: |
static-buffer | 1.649 | 1.649 | 0 | 0 | :heavy_minus_sign: |
trait-dyn-cross-contract-calls | 2.706 | 2.706 | 0 | 0 | :heavy_minus_sign: |
trait-dyn-cross-contract-calls/contracts/incrementer | 1.549 | 1.549 | 0 | 0 | :heavy_minus_sign: |
trait-erc20 | 7.294 | 7.294 | 0 | 0 | :heavy_minus_sign: |
trait-flipper | 1.453 | 1.453 | 0 | 0 | :heavy_minus_sign: |
trait-incrementer | 1.614 | 1.614 | 0 | 0 | :heavy_minus_sign: |
upgradeable-contracts/delegator | 3.152 | 3.152 | 0 | 0 | :heavy_minus_sign: |
upgradeable-contracts/delegator/delegatee | 1.613 | 1.613 | 0 | 0 | :heavy_minus_sign: |
upgradeable-contracts/set-code-hash | 1.747 | 1.747 | 0 | 0 | :heavy_minus_sign: |
upgradeable-contracts/set-code-hash/updated-incrementer | 1.726 | 1.726 | 0 | 0 | :heavy_minus_sign: |
wildcard-selector | 2.852 | 2.852 | 0 | 0 | :heavy_minus_sign: |
Link to the run | Last update: Thu Jan 11 06:13:55 CET 2024
So signature topic can be defined in 6 ways:
I think it should be:just 3 ways:
Automatically calculated using #[ink(event) or #[ink::event] attributes
Automatically calculated with #[ink::signature_topic] when #[derive(Event) is used directly
Manually specified with #[ink(event, signature_topic = s) for local events
Manually specified with #[ink::event(signature_topic = s)] for shared events
Manually specified with #[ink::signature_topic(hash = s)] for shared events with #[derive(Event)]
^^ Instead: #[derive(Event)]
with #[ink(signature_topic = 0x)]
Manually specified by implementing GetSignatureTopic for the event struct directly for shared events
So in essence we have the
#[ink::event(signature_topic = 0x...)]]
Which expands to
#[derive(Event)]
#[ink(signature_topic = 0x...)]
The derive then picks up the ink
attribute, so exactly how anonymous
currently works (IIRC).
A general question - why do we need it? I'm not convinced original argument "we have this for selectors so we can have it for events" . For selectors it makes sense for backwards compatibility - imagine upgrading a contract and want to maintain compatibility with the rest of the ecosystem. For events, signature is based on the event's structure only, right? So there's no problem with backwards compatibility - if event has the same structure, old deserializers will still work.
The way I see it, this feature can actually trick clients to observe, fetch, deserialize, etc. events that are not the ones they're interested in - example I'm observing PSP22::Transfer
events with signature XYZ
and there are contracts using custom signature topic XYZ
even though they're not PSP22
contracts or not emitting PSP22::Transfer
events.
A general question - why do we need it? I'm not convinced original argument "we have this for selectors so we can have it for events" . For selectors it makes sense for backwards compatibility - imagine upgrading a contract and want to maintain compatibility with the rest of the ecosystem. For events, signature is based on the event's structure only, right? So there's no problem with backwards compatibility - if event has the same structure, old deserializers will still work.
The way I see it, this feature can actually trick clients to observe, fetch, deserialize, etc. events that are not the ones they're interested in - example I'm observing
PSP22::Transfer
events with signatureXYZ
and there are contracts using custom signature topicXYZ
even though they're notPSP22
contracts or not emittingPSP22::Transfer
events.
This is useful for two reasons:
Ident(field_types)
. If the develop wants to use ident definition from the other contract that is publically accessible, and the event definition is conflicting with the existing one, they can just rename it and specify the signature topic of the original one.
Summary
Closes #1838 and follows up #1827
cargo-contract
orpallet-contracts
?Introduces optional attribute
signature_topic
to the#[ink::event]
and#[ink(event)]
that takes 32-byte hash string to specify a signature topic for the specific event manually.Description
It introduces a new macro attribute
#[ink(signature_topic = _)]
, part ofEvent
, and the same argument can be used with inline events, but subject to discussion in #2046.Example
If
signature_topic
is not specified, then topic will be calculated automatically, otherwise the hash string will be used. This attribute is appended automatically in#[ink::event]
.Breaking changeNo breaking changes have been introduced. The
signature_topic
argument is totally optional.Checklist before requesting a review
CHANGELOG.md