Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Add documentation to SubmitSignedTransaction and actually make it work #4200

Merged
merged 37 commits into from
Jan 10, 2020

Conversation

tomusdrw
Copy link
Contributor

With recent changes to crypto stuff (notably IdentifyAccount that makes the AccountId diverge from PublicKey) the SubmitSignedTransaction trait family was not really working correctly.

The main complications arise because of application-crypto type wrappers (app-crypto) and signed aggregators (MultiSigner), this requires a bit of From/TryInto/Into magic and some additional trait bounds, that on the first sight look unnecessary in this code :)

This PR is an attempt to fix that and also make it more convenient to use local keys for transaction signing (see SigningAccountFinder). This additional trait bound can be used to create and submit signed transactions from offchain calls using all local keys (intersected with some list of accounts).

Still WiP, as I want to work on tests a bit more, but wanted to make this visible for @kianenigma @gnunicorn and @andresilva

@gavofyork gavofyork added the A3-in_progress Pull request is in progress. No review needed at this stage. label Nov 26, 2019
@andresilva andresilva mentioned this pull request Dec 11, 2019
7 tasks
andresilva added a commit that referenced this pull request Dec 11, 2019
…ctually make it work

Squashed commit of the following:

commit dc8d71c
Author: Tomasz Drwięga <[email protected]>
Date:   Tue Dec 3 16:29:33 2019 +0100

    Split the method to avoid confusing type error message.

commit 0c4c037
Author: Tomasz Drwięga <[email protected]>
Date:   Tue Dec 3 16:19:55 2019 +0100

    Make accounts optional, fix logic.

commit d715f64
Author: Tomasz Drwięga <[email protected]>
Date:   Tue Dec 3 10:06:20 2019 +0100

    Remove warning.

commit 3f38218
Merge: f85b890 368318c
Author: Tomasz Drwięga <[email protected]>
Date:   Tue Dec 3 07:08:05 2019 +0100

    Merge branch 'master' into td-signed-transactions

commit f85b890
Merge: f8c9540 d8d5da2
Author: Tomasz Drwięga <[email protected]>
Date:   Mon Dec 2 13:57:25 2019 +0100

    Merge branch 'master' into td-signed-transactions

commit f8c9540
Author: Tomasz Drwięga <[email protected]>
Date:   Mon Nov 25 17:34:52 2019 +0100

    Forgotten import.

commit a645b90
Author: Tomasz Drwięga <[email protected]>
Date:   Mon Nov 25 17:32:10 2019 +0100

    Fix naming and bounds.

commit bc28c60
Author: Tomasz Drwięga <[email protected]>
Date:   Mon Nov 25 17:01:05 2019 +0100

    Add documentation to signed transactions and actually make them work.
@tomusdrw tomusdrw marked this pull request as ready for review December 20, 2019 17:07
@tomusdrw tomusdrw removed the A3-in_progress Pull request is in progress. No review needed at this stage. label Dec 20, 2019
@gavofyork
Copy link
Member

@tomusdrw is this merge correct?

@gavofyork gavofyork added A6-seemsok and removed A0-please_review Pull request needs code review. labels Jan 3, 2020
@tomusdrw
Copy link
Contributor Author

tomusdrw commented Jan 5, 2020

Yup, thanks! Could I get a second review on this? @bkchr maybe if you have some time? 😈

Copy link
Member

@bkchr bkchr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just "some" nitpicks.

@@ -0,0 +1,837 @@
// Copyright 2018-2019 Parity Technologies (UK) Ltd.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// Copyright 2018-2019 Parity Technologies (UK) Ltd.
// Copyright 2018-2020 Parity Technologies (UK) Ltd.

use node_testing::keyring::*;

mod common;
use self::common::{*, sign};
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
use self::common::{*, sign};
use self::common::*;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This doesn't work as there is a conflict with glob imports (common and keystore), so we need to define sign explicitly.

mod common;
use self::common::{*, sign};


Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

bin/node/executor/tests/common.rs Outdated Show resolved Hide resolved
bin/node/executor/tests/fees.rs Outdated Show resolved Hide resolved
frame/system/src/offchain.rs Outdated Show resolved Hide resolved
frame/system/src/offchain.rs Outdated Show resolved Hide resolved
frame/system/src/offchain.rs Outdated Show resolved Hide resolved
frame/system/src/offchain.rs Show resolved Hide resolved
frame/system/src/offchain.rs Show resolved Hide resolved
frame/system/src/lib.rs Outdated Show resolved Hide resolved
@tomusdrw tomusdrw added A3-in_progress Pull request is in progress. No review needed at this stage. and removed A6-seemsok labels Jan 8, 2020
@tomusdrw
Copy link
Contributor Author

tomusdrw commented Jan 9, 2020

@bkchr convinced me to change offchain_worker RuntimeApi and pass the entire header to make the initialization properly, I'm working on this right now, hence the inprogress tag.

@tomusdrw tomusdrw added A0-please_review Pull request needs code review. and removed A3-in_progress Pull request is in progress. No review needed at this stage. labels Jan 9, 2020
@gavofyork gavofyork merged commit 8974349 into master Jan 10, 2020
@gavofyork gavofyork deleted the td-signed-transactions branch January 10, 2020 00:46
andresilva added a commit that referenced this pull request May 6, 2020
* session: runtime api for generating session membership proofs

* grandpa: add runtime api for creating equivocation report txs

* grandpa: submit signed equivocation report transactions

* grandpa: use proper equivocation report type

* grandpa: report equivocations

* grandpa: validate equivocation proof

* grandpa: update to finality-grandpa 0.9.1

* grandpa: fix encoding of session membership proof

* grandpa: initialize set id session mapping for genesis session

* grandpa: fix bug in set_id session validation

* fix compilation

* cleanup from merge conflicts

* cleanup crate tomls

* grandpa: refactor equivocation handling to separate trait

* node-template: fix compilation

* fix test compilation

* bump finality-grandpa to v0.10.2

* rpc: fix runtime version test

* CHERRY-PICK #4200: Add documentation to SubmitSignedTransaction and actually make it work

Squashed commit of the following:

commit dc8d71c
Author: Tomasz Drwięga <[email protected]>
Date:   Tue Dec 3 16:29:33 2019 +0100

    Split the method to avoid confusing type error message.

commit 0c4c037
Author: Tomasz Drwięga <[email protected]>
Date:   Tue Dec 3 16:19:55 2019 +0100

    Make accounts optional, fix logic.

commit d715f64
Author: Tomasz Drwięga <[email protected]>
Date:   Tue Dec 3 10:06:20 2019 +0100

    Remove warning.

commit 3f38218
Merge: f85b890 368318c
Author: Tomasz Drwięga <[email protected]>
Date:   Tue Dec 3 07:08:05 2019 +0100

    Merge branch 'master' into td-signed-transactions

commit f85b890
Merge: f8c9540 d8d5da2
Author: Tomasz Drwięga <[email protected]>
Date:   Mon Dec 2 13:57:25 2019 +0100

    Merge branch 'master' into td-signed-transactions

commit f8c9540
Author: Tomasz Drwięga <[email protected]>
Date:   Mon Nov 25 17:34:52 2019 +0100

    Forgotten import.

commit a645b90
Author: Tomasz Drwięga <[email protected]>
Date:   Mon Nov 25 17:32:10 2019 +0100

    Fix naming and bounds.

commit bc28c60
Author: Tomasz Drwięga <[email protected]>
Date:   Mon Nov 25 17:01:05 2019 +0100

    Add documentation to signed transactions and actually make them work.

* grandpa: skip block initialization on report submission method

* primitives: allow transaction pool access by default for offchain calls

* grandpa: unused parameters

* grandpa: remove unused method

* grandpa: enable equivocation reporting

* grandpa: add workaround for parameter encoding

* grandpa: fix localized_payload calls in tests

* fix submit_report_equivocation_extrinsic in runtimes

* node: fix submit transaction test compilation

* node: bump spec_version

* rpc: fix api version test

* grandpa: allow custom equivocation offence type

* grandpa: add test for authorities::next_change_height

* grandpa: cleanup report_equivocation function

* node: move reporting app crypto to node-primitives

* grandpa: move equivocation traits to own module

* grandpa: rename app-crypto crate import

* grandpa: export equivocation types

* node: bump spec_version

* grandpa: rename EquivocationReport to EquivocationProof

* grandpa: add missing docs to primitives

* grandpa: add missing docs to equivocation

* node: fix compilation

* grandpa: add missing docs to pallet

* node: bump spec_version

* fix whitespace

* grandpa: return error on offence reporting

* grandpa: expose session and validator count in proofs through traits

* grandpa: use strong key in module KeyOwnerProofSystem

* grandpa: move key ownership proof to grandpa runtime api

* grandpa: remove unnecessary cloning when checking equivocation proof

* grandpa: make report_equivocation a method in Environment

* support: implement KeyOwnerProofSystem for ()

* grandpa: move KeyOwnerProofSystem to module trait

* test-utils: fix runtime compilation

* grandpa: fix test compilation

* grandpa: fix test compilation after merge

* grandpa: simplify transaction submission types

* grandpa: validate equivocation report in signed extension

* client: fix test

* node: use ValidateEquivocationReport signed extension

* grandpa: expose key ownership proof under opaque type

* grandpa: better docs on key ownership proofs

* grandpa: add note about signed extension

* grandpa: add ValidateEquivocationReport::new

* grandpa: remove skip_initialize_block from runtime api

* grandpa: use new offchain transaction submission API

* grandpa: take set_id in generate_key_ownership_proof

* grandpa: update to finality-grandpa v0.12.2

* grandpa: cleanup usages of AuthoritySet::current

* grandpa: fix test

* grandpa: add mocking utilities for equivocation reporting

* grandpa: add test for equivocation reporting

* grandpa: move SetIdSession initialization

* grandpa: add more tests

* node: enable historical session manager

* node: bump spec_version

* node: use strong key types in KeyOwnerProofSystem definitions

* grandpa: export GrandpaEquivocationOffence type
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
A0-please_review Pull request needs code review.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants