This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Refactor CurrencyToVote - #6896

Merged
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote
Oct 8, 2020
Merged

Refactor CurrencyToVote#6896
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote

Conversation

@kianenigma

@kianenigmakianenigma commented Aug 14, 2020

Copy link
Copy Markdown
Contributor

Both staking and elections-phragmen need Type CurrencyToVote that helps them convert T::Currency::Balance into u64. This values is then later on used for complex arithmetic where overflow might happen.

This PR refactors this in a few ways:

  1. Move away from Convert to a custom trait that accepts total_issuance as parameter. This avoid all the numerous calls to T::Currency::TotalIssuance(). Indeed, these calls will be a hit in the overlay cache but still it will incur some overhead, given that we were calling it many many many times (i.e. once per nominator, multiple times -- this is the order).
  2. Move everything, with much better documentation to support to allow reuse.

polkadot companion: paritytech/polkadot#1610

@kianenigmakianenigma added A0-please_review Pull request needs code review. B5-clientnoteworthy C1-low PR touches the given topic and has a low impact on builders. labels Aug 14, 2020
@kianenigma
kianenigma requested review from shawntabrizi and tomusdrw and removed request for andresilvaAugust 17, 2020 09:14
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/support/src/traits.rs
Comment threadbin/node/runtime/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs
Comment threadframe/support/src/traits.rs Outdated

/// A trait similar to `Convert` to convert values from `B` (i.e. the `Balance` type of the chain)
/// into u64, which is the standard numeric types used in election and other places where complex
/// calculation over balance type is needed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should the trait docs hint what to do with overflows? It seems that this might be a lossy conversion and it's not clear to me how to implement such trait for say U256 balance type just by looking at the trait definition.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I think end of the day that depends on the chain's logic and their builders decision.

In other words, I cannot give them a definitive advise here of what to do :D so I will just leave it open.

Comment threadframe/support/src/traits.rs Outdated

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

implementation looks good to me

Comment threadframe/support/src/traits.rs Outdated
Comment threadframe/support/src/traits.rs Outdated
kianenigmaand others added 3 commits August 17, 2020 16:20
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
…/substrate into kiz-refactor-currency-to-vote

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm

Comment threadframe/support/src/traits.rs Outdated

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm % Gui's grumbles

Comment threadframe/support/src/traits.rs

@shawntabrizishawntabrizi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

afaict looks good, although if anyone uses this new currency to vote in storage, bad things may happen. user discretion advised.

@kianenigmakianenigma added D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited and removed A8-mergeoncegreen labels Aug 21, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I am being a bit conservative here with the audit request. The PR itself really only duplicates the previous code, in a nicer and more optimised way. Nonetheless, I think the old logic of currency -> vote which has been silently propagated everywhere itself is worthy of an audit.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Keeping up to date; still needs an audit.

@bkchr

bkchr commented Oct 1, 2020

Copy link
Copy Markdown
Member

Also needs a master merge :D

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Should be first audited anyhow. Hopefully next week

@viniul

Copy link
Copy Markdown
Contributor

We are done with our review for this PR and don't see any issues with it, lgtm!

@kianenigmakianenigma added D1-audited 👍 PR contains changes to fund-managing logic that has been properly reviewed and externally audited and removed A1-onice D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited labels Oct 7, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I want to do another self review tomorrow and then we proceed with the merge.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

bot merge

@ghost

ghost commented Oct 8, 2020

Copy link
Copy Markdown

Trying merge.

@ghost
ghost merged commit 90e8abf into masterOct 8, 2020
@ghost
ghost deleted the kiz-refactor-currency-to-vote branch October 8, 2020 14:50
ordian added a commit that referenced this pull request Oct 9, 2020
…up-updates
* master:
Async keystore + Authority-Discovery async/await (#7000)
Fixes logging of target names with dashes (#7281)
seal: Add automated weights for contract API calls (#7017)
add ss58 id for nodle (#7279)
Refactor CurrencyToVote (#6896)
bump-allocator: document & poison (#7277)
Reset flaming fir network (#7274)
reschedule (#6860)
Drop system cache for trie benchmarks (#7242)
client: improve log formatting (#7272)
Rework `InspectState` (#7271)
SystemOrigin trait (#7226)
Update ss58 registry for Dock network (#7263)
.maintain/monitoring: Add alert when continuous task ends (#7250)
Rename `TRANSACTION_VERSION` to `EXTRINSIC_VERSION` (#7258)
Split block announce processing into two parts (#6958)
Fix offchain election to respect the weight (#7215)
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.D1-audited 👍PR contains changes to fund-managing logic that has been properly reviewed and externally audited

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@kianenigma@bkchr@viniul@tomusdrw@shawntabrizi@gui1117@gnunicorn@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Refactor CurrencyToVote - #6896

Merged
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote
Oct 8, 2020
Merged

Refactor CurrencyToVote#6896
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote

Conversation

@kianenigma

@kianenigmakianenigma commented Aug 14, 2020

Copy link
Copy Markdown
Contributor

Both staking and elections-phragmen need Type CurrencyToVote that helps them convert T::Currency::Balance into u64. This values is then later on used for complex arithmetic where overflow might happen.

This PR refactors this in a few ways:

  1. Move away from Convert to a custom trait that accepts total_issuance as parameter. This avoid all the numerous calls to T::Currency::TotalIssuance(). Indeed, these calls will be a hit in the overlay cache but still it will incur some overhead, given that we were calling it many many many times (i.e. once per nominator, multiple times -- this is the order).
  2. Move everything, with much better documentation to support to allow reuse.

polkadot companion: paritytech/polkadot#1610

@kianenigmakianenigma added A0-please_review Pull request needs code review. B5-clientnoteworthy C1-low PR touches the given topic and has a low impact on builders. labels Aug 14, 2020
@kianenigma
kianenigma requested review from shawntabrizi and tomusdrw and removed request for andresilvaAugust 17, 2020 09:14
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/support/src/traits.rs
Comment threadbin/node/runtime/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs
Comment threadframe/support/src/traits.rs Outdated

/// A trait similar to `Convert` to convert values from `B` (i.e. the `Balance` type of the chain)
/// into u64, which is the standard numeric types used in election and other places where complex
/// calculation over balance type is needed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should the trait docs hint what to do with overflows? It seems that this might be a lossy conversion and it's not clear to me how to implement such trait for say U256 balance type just by looking at the trait definition.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I think end of the day that depends on the chain's logic and their builders decision.

In other words, I cannot give them a definitive advise here of what to do :D so I will just leave it open.

Comment threadframe/support/src/traits.rs Outdated

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

implementation looks good to me

Comment threadframe/support/src/traits.rs Outdated
Comment threadframe/support/src/traits.rs Outdated
kianenigmaand others added 3 commits August 17, 2020 16:20
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
…/substrate into kiz-refactor-currency-to-vote

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm

Comment threadframe/support/src/traits.rs Outdated

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm % Gui's grumbles

Comment threadframe/support/src/traits.rs

@shawntabrizishawntabrizi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

afaict looks good, although if anyone uses this new currency to vote in storage, bad things may happen. user discretion advised.

@kianenigmakianenigma added D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited and removed A8-mergeoncegreen labels Aug 21, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I am being a bit conservative here with the audit request. The PR itself really only duplicates the previous code, in a nicer and more optimised way. Nonetheless, I think the old logic of currency -> vote which has been silently propagated everywhere itself is worthy of an audit.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Keeping up to date; still needs an audit.

@bkchr

bkchr commented Oct 1, 2020

Copy link
Copy Markdown
Member

Also needs a master merge :D

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Should be first audited anyhow. Hopefully next week

@viniul

Copy link
Copy Markdown
Contributor

We are done with our review for this PR and don't see any issues with it, lgtm!

@kianenigmakianenigma added D1-audited 👍 PR contains changes to fund-managing logic that has been properly reviewed and externally audited and removed A1-onice D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited labels Oct 7, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I want to do another self review tomorrow and then we proceed with the merge.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

bot merge

@ghost

ghost commented Oct 8, 2020

Copy link
Copy Markdown

Trying merge.

@ghost
ghost merged commit 90e8abf into masterOct 8, 2020
@ghost
ghost deleted the kiz-refactor-currency-to-vote branch October 8, 2020 14:50
ordian added a commit that referenced this pull request Oct 9, 2020
…up-updates
* master:
Async keystore + Authority-Discovery async/await (#7000)
Fixes logging of target names with dashes (#7281)
seal: Add automated weights for contract API calls (#7017)
add ss58 id for nodle (#7279)
Refactor CurrencyToVote (#6896)
bump-allocator: document & poison (#7277)
Reset flaming fir network (#7274)
reschedule (#6860)
Drop system cache for trie benchmarks (#7242)
client: improve log formatting (#7272)
Rework `InspectState` (#7271)
SystemOrigin trait (#7226)
Update ss58 registry for Dock network (#7263)
.maintain/monitoring: Add alert when continuous task ends (#7250)
Rename `TRANSACTION_VERSION` to `EXTRINSIC_VERSION` (#7258)
Split block announce processing into two parts (#6958)
Fix offchain election to respect the weight (#7215)
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.D1-audited 👍PR contains changes to fund-managing logic that has been properly reviewed and externally audited

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@kianenigma@bkchr@viniul@tomusdrw@shawntabrizi@gui1117@gnunicorn@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Refactor CurrencyToVote - #6896

Merged
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote
Oct 8, 2020
Merged

Refactor CurrencyToVote#6896
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote

Conversation

@kianenigma

@kianenigmakianenigma commented Aug 14, 2020

Copy link
Copy Markdown
Contributor

Both staking and elections-phragmen need Type CurrencyToVote that helps them convert T::Currency::Balance into u64. This values is then later on used for complex arithmetic where overflow might happen.

This PR refactors this in a few ways:

  1. Move away from Convert to a custom trait that accepts total_issuance as parameter. This avoid all the numerous calls to T::Currency::TotalIssuance(). Indeed, these calls will be a hit in the overlay cache but still it will incur some overhead, given that we were calling it many many many times (i.e. once per nominator, multiple times -- this is the order).
  2. Move everything, with much better documentation to support to allow reuse.

polkadot companion: paritytech/polkadot#1610

@kianenigmakianenigma added A0-please_review Pull request needs code review. B5-clientnoteworthy C1-low PR touches the given topic and has a low impact on builders. labels Aug 14, 2020
@kianenigma
kianenigma requested review from shawntabrizi and tomusdrw and removed request for andresilvaAugust 17, 2020 09:14
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/support/src/traits.rs
Comment threadbin/node/runtime/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs
Comment threadframe/support/src/traits.rs Outdated

/// A trait similar to `Convert` to convert values from `B` (i.e. the `Balance` type of the chain)
/// into u64, which is the standard numeric types used in election and other places where complex
/// calculation over balance type is needed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should the trait docs hint what to do with overflows? It seems that this might be a lossy conversion and it's not clear to me how to implement such trait for say U256 balance type just by looking at the trait definition.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I think end of the day that depends on the chain's logic and their builders decision.

In other words, I cannot give them a definitive advise here of what to do :D so I will just leave it open.

Comment threadframe/support/src/traits.rs Outdated

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

implementation looks good to me

Comment threadframe/support/src/traits.rs Outdated
Comment threadframe/support/src/traits.rs Outdated
kianenigmaand others added 3 commits August 17, 2020 16:20
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
…/substrate into kiz-refactor-currency-to-vote

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm

Comment threadframe/support/src/traits.rs Outdated

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm % Gui's grumbles

Comment threadframe/support/src/traits.rs

@shawntabrizishawntabrizi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

afaict looks good, although if anyone uses this new currency to vote in storage, bad things may happen. user discretion advised.

@kianenigmakianenigma added D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited and removed A8-mergeoncegreen labels Aug 21, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I am being a bit conservative here with the audit request. The PR itself really only duplicates the previous code, in a nicer and more optimised way. Nonetheless, I think the old logic of currency -> vote which has been silently propagated everywhere itself is worthy of an audit.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Keeping up to date; still needs an audit.

@bkchr

bkchr commented Oct 1, 2020

Copy link
Copy Markdown
Member

Also needs a master merge :D

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Should be first audited anyhow. Hopefully next week

@viniul

Copy link
Copy Markdown
Contributor

We are done with our review for this PR and don't see any issues with it, lgtm!

@kianenigmakianenigma added D1-audited 👍 PR contains changes to fund-managing logic that has been properly reviewed and externally audited and removed A1-onice D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited labels Oct 7, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I want to do another self review tomorrow and then we proceed with the merge.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

bot merge

@ghost

ghost commented Oct 8, 2020

Copy link
Copy Markdown

Trying merge.

@ghost
ghost merged commit 90e8abf into masterOct 8, 2020
@ghost
ghost deleted the kiz-refactor-currency-to-vote branch October 8, 2020 14:50
ordian added a commit that referenced this pull request Oct 9, 2020
…up-updates
* master:
Async keystore + Authority-Discovery async/await (#7000)
Fixes logging of target names with dashes (#7281)
seal: Add automated weights for contract API calls (#7017)
add ss58 id for nodle (#7279)
Refactor CurrencyToVote (#6896)
bump-allocator: document & poison (#7277)
Reset flaming fir network (#7274)
reschedule (#6860)
Drop system cache for trie benchmarks (#7242)
client: improve log formatting (#7272)
Rework `InspectState` (#7271)
SystemOrigin trait (#7226)
Update ss58 registry for Dock network (#7263)
.maintain/monitoring: Add alert when continuous task ends (#7250)
Rename `TRANSACTION_VERSION` to `EXTRINSIC_VERSION` (#7258)
Split block announce processing into two parts (#6958)
Fix offchain election to respect the weight (#7215)
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.D1-audited 👍PR contains changes to fund-managing logic that has been properly reviewed and externally audited

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@kianenigma@bkchr@viniul@tomusdrw@shawntabrizi@gui1117@gnunicorn@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Refactor CurrencyToVote - #6896

Merged
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote
Oct 8, 2020
Merged

Refactor CurrencyToVote#6896
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote

Conversation

@kianenigma

@kianenigmakianenigma commented Aug 14, 2020

Copy link
Copy Markdown
Contributor

Both staking and elections-phragmen need Type CurrencyToVote that helps them convert T::Currency::Balance into u64. This values is then later on used for complex arithmetic where overflow might happen.

This PR refactors this in a few ways:

  1. Move away from Convert to a custom trait that accepts total_issuance as parameter. This avoid all the numerous calls to T::Currency::TotalIssuance(). Indeed, these calls will be a hit in the overlay cache but still it will incur some overhead, given that we were calling it many many many times (i.e. once per nominator, multiple times -- this is the order).
  2. Move everything, with much better documentation to support to allow reuse.

polkadot companion: paritytech/polkadot#1610

@kianenigmakianenigma added A0-please_review Pull request needs code review. B5-clientnoteworthy C1-low PR touches the given topic and has a low impact on builders. labels Aug 14, 2020
@kianenigma
kianenigma requested review from shawntabrizi and tomusdrw and removed request for andresilvaAugust 17, 2020 09:14
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/support/src/traits.rs
Comment threadbin/node/runtime/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs
Comment threadframe/support/src/traits.rs Outdated

/// A trait similar to `Convert` to convert values from `B` (i.e. the `Balance` type of the chain)
/// into u64, which is the standard numeric types used in election and other places where complex
/// calculation over balance type is needed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should the trait docs hint what to do with overflows? It seems that this might be a lossy conversion and it's not clear to me how to implement such trait for say U256 balance type just by looking at the trait definition.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I think end of the day that depends on the chain's logic and their builders decision.

In other words, I cannot give them a definitive advise here of what to do :D so I will just leave it open.

Comment threadframe/support/src/traits.rs Outdated

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

implementation looks good to me

Comment threadframe/support/src/traits.rs Outdated
Comment threadframe/support/src/traits.rs Outdated
kianenigmaand others added 3 commits August 17, 2020 16:20
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
…/substrate into kiz-refactor-currency-to-vote

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm

Comment threadframe/support/src/traits.rs Outdated

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm % Gui's grumbles

Comment threadframe/support/src/traits.rs

@shawntabrizishawntabrizi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

afaict looks good, although if anyone uses this new currency to vote in storage, bad things may happen. user discretion advised.

@kianenigmakianenigma added D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited and removed A8-mergeoncegreen labels Aug 21, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I am being a bit conservative here with the audit request. The PR itself really only duplicates the previous code, in a nicer and more optimised way. Nonetheless, I think the old logic of currency -> vote which has been silently propagated everywhere itself is worthy of an audit.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Keeping up to date; still needs an audit.

@bkchr

bkchr commented Oct 1, 2020

Copy link
Copy Markdown
Member

Also needs a master merge :D

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Should be first audited anyhow. Hopefully next week

@viniul

Copy link
Copy Markdown
Contributor

We are done with our review for this PR and don't see any issues with it, lgtm!

@kianenigmakianenigma added D1-audited 👍 PR contains changes to fund-managing logic that has been properly reviewed and externally audited and removed A1-onice D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited labels Oct 7, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I want to do another self review tomorrow and then we proceed with the merge.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

bot merge

@ghost

ghost commented Oct 8, 2020

Copy link
Copy Markdown

Trying merge.

@ghost
ghost merged commit 90e8abf into masterOct 8, 2020
@ghost
ghost deleted the kiz-refactor-currency-to-vote branch October 8, 2020 14:50
ordian added a commit that referenced this pull request Oct 9, 2020
…up-updates
* master:
Async keystore + Authority-Discovery async/await (#7000)
Fixes logging of target names with dashes (#7281)
seal: Add automated weights for contract API calls (#7017)
add ss58 id for nodle (#7279)
Refactor CurrencyToVote (#6896)
bump-allocator: document & poison (#7277)
Reset flaming fir network (#7274)
reschedule (#6860)
Drop system cache for trie benchmarks (#7242)
client: improve log formatting (#7272)
Rework `InspectState` (#7271)
SystemOrigin trait (#7226)
Update ss58 registry for Dock network (#7263)
.maintain/monitoring: Add alert when continuous task ends (#7250)
Rename `TRANSACTION_VERSION` to `EXTRINSIC_VERSION` (#7258)
Split block announce processing into two parts (#6958)
Fix offchain election to respect the weight (#7215)
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.D1-audited 👍PR contains changes to fund-managing logic that has been properly reviewed and externally audited

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@kianenigma@bkchr@viniul@tomusdrw@shawntabrizi@gui1117@gnunicorn@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Refactor CurrencyToVote - #6896

Merged
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote
Oct 8, 2020
Merged

Refactor CurrencyToVote#6896
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote

Conversation

@kianenigma

@kianenigmakianenigma commented Aug 14, 2020

Copy link
Copy Markdown
Contributor

Both staking and elections-phragmen need Type CurrencyToVote that helps them convert T::Currency::Balance into u64. This values is then later on used for complex arithmetic where overflow might happen.

This PR refactors this in a few ways:

  1. Move away from Convert to a custom trait that accepts total_issuance as parameter. This avoid all the numerous calls to T::Currency::TotalIssuance(). Indeed, these calls will be a hit in the overlay cache but still it will incur some overhead, given that we were calling it many many many times (i.e. once per nominator, multiple times -- this is the order).
  2. Move everything, with much better documentation to support to allow reuse.

polkadot companion: paritytech/polkadot#1610

@kianenigmakianenigma added A0-please_review Pull request needs code review. B5-clientnoteworthy C1-low PR touches the given topic and has a low impact on builders. labels Aug 14, 2020
@kianenigma
kianenigma requested review from shawntabrizi and tomusdrw and removed request for andresilvaAugust 17, 2020 09:14
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/support/src/traits.rs
Comment threadbin/node/runtime/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs
Comment threadframe/support/src/traits.rs Outdated

/// A trait similar to `Convert` to convert values from `B` (i.e. the `Balance` type of the chain)
/// into u64, which is the standard numeric types used in election and other places where complex
/// calculation over balance type is needed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should the trait docs hint what to do with overflows? It seems that this might be a lossy conversion and it's not clear to me how to implement such trait for say U256 balance type just by looking at the trait definition.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I think end of the day that depends on the chain's logic and their builders decision.

In other words, I cannot give them a definitive advise here of what to do :D so I will just leave it open.

Comment threadframe/support/src/traits.rs Outdated

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

implementation looks good to me

Comment threadframe/support/src/traits.rs Outdated
Comment threadframe/support/src/traits.rs Outdated
kianenigmaand others added 3 commits August 17, 2020 16:20
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
…/substrate into kiz-refactor-currency-to-vote

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm

Comment threadframe/support/src/traits.rs Outdated

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm % Gui's grumbles

Comment threadframe/support/src/traits.rs

@shawntabrizishawntabrizi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

afaict looks good, although if anyone uses this new currency to vote in storage, bad things may happen. user discretion advised.

@kianenigmakianenigma added D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited and removed A8-mergeoncegreen labels Aug 21, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I am being a bit conservative here with the audit request. The PR itself really only duplicates the previous code, in a nicer and more optimised way. Nonetheless, I think the old logic of currency -> vote which has been silently propagated everywhere itself is worthy of an audit.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Keeping up to date; still needs an audit.

@bkchr

bkchr commented Oct 1, 2020

Copy link
Copy Markdown
Member

Also needs a master merge :D

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Should be first audited anyhow. Hopefully next week

@viniul

Copy link
Copy Markdown
Contributor

We are done with our review for this PR and don't see any issues with it, lgtm!

@kianenigmakianenigma added D1-audited 👍 PR contains changes to fund-managing logic that has been properly reviewed and externally audited and removed A1-onice D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited labels Oct 7, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I want to do another self review tomorrow and then we proceed with the merge.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

bot merge

@ghost

ghost commented Oct 8, 2020

Copy link
Copy Markdown

Trying merge.

@ghost
ghost merged commit 90e8abf into masterOct 8, 2020
@ghost
ghost deleted the kiz-refactor-currency-to-vote branch October 8, 2020 14:50
ordian added a commit that referenced this pull request Oct 9, 2020
…up-updates
* master:
Async keystore + Authority-Discovery async/await (#7000)
Fixes logging of target names with dashes (#7281)
seal: Add automated weights for contract API calls (#7017)
add ss58 id for nodle (#7279)
Refactor CurrencyToVote (#6896)
bump-allocator: document & poison (#7277)
Reset flaming fir network (#7274)
reschedule (#6860)
Drop system cache for trie benchmarks (#7242)
client: improve log formatting (#7272)
Rework `InspectState` (#7271)
SystemOrigin trait (#7226)
Update ss58 registry for Dock network (#7263)
.maintain/monitoring: Add alert when continuous task ends (#7250)
Rename `TRANSACTION_VERSION` to `EXTRINSIC_VERSION` (#7258)
Split block announce processing into two parts (#6958)
Fix offchain election to respect the weight (#7215)
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.D1-audited 👍PR contains changes to fund-managing logic that has been properly reviewed and externally audited

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@kianenigma@bkchr@viniul@tomusdrw@shawntabrizi@gui1117@gnunicorn@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Refactor CurrencyToVote - #6896

Merged
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote
Oct 8, 2020
Merged

Refactor CurrencyToVote#6896
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote

Conversation

@kianenigma

@kianenigmakianenigma commented Aug 14, 2020

Copy link
Copy Markdown
Contributor

Both staking and elections-phragmen need Type CurrencyToVote that helps them convert T::Currency::Balance into u64. This values is then later on used for complex arithmetic where overflow might happen.

This PR refactors this in a few ways:

  1. Move away from Convert to a custom trait that accepts total_issuance as parameter. This avoid all the numerous calls to T::Currency::TotalIssuance(). Indeed, these calls will be a hit in the overlay cache but still it will incur some overhead, given that we were calling it many many many times (i.e. once per nominator, multiple times -- this is the order).
  2. Move everything, with much better documentation to support to allow reuse.

polkadot companion: paritytech/polkadot#1610

@kianenigmakianenigma added A0-please_review Pull request needs code review. B5-clientnoteworthy C1-low PR touches the given topic and has a low impact on builders. labels Aug 14, 2020
@kianenigma
kianenigma requested review from shawntabrizi and tomusdrw and removed request for andresilvaAugust 17, 2020 09:14
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/support/src/traits.rs
Comment threadbin/node/runtime/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs
Comment threadframe/support/src/traits.rs Outdated

/// A trait similar to `Convert` to convert values from `B` (i.e. the `Balance` type of the chain)
/// into u64, which is the standard numeric types used in election and other places where complex
/// calculation over balance type is needed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should the trait docs hint what to do with overflows? It seems that this might be a lossy conversion and it's not clear to me how to implement such trait for say U256 balance type just by looking at the trait definition.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I think end of the day that depends on the chain's logic and their builders decision.

In other words, I cannot give them a definitive advise here of what to do :D so I will just leave it open.

Comment threadframe/support/src/traits.rs Outdated

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

implementation looks good to me

Comment threadframe/support/src/traits.rs Outdated
Comment threadframe/support/src/traits.rs Outdated
kianenigmaand others added 3 commits August 17, 2020 16:20
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
…/substrate into kiz-refactor-currency-to-vote

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm

Comment threadframe/support/src/traits.rs Outdated

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm % Gui's grumbles

Comment threadframe/support/src/traits.rs

@shawntabrizishawntabrizi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

afaict looks good, although if anyone uses this new currency to vote in storage, bad things may happen. user discretion advised.

@kianenigmakianenigma added D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited and removed A8-mergeoncegreen labels Aug 21, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I am being a bit conservative here with the audit request. The PR itself really only duplicates the previous code, in a nicer and more optimised way. Nonetheless, I think the old logic of currency -> vote which has been silently propagated everywhere itself is worthy of an audit.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Keeping up to date; still needs an audit.

@bkchr

bkchr commented Oct 1, 2020

Copy link
Copy Markdown
Member

Also needs a master merge :D

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Should be first audited anyhow. Hopefully next week

@viniul

Copy link
Copy Markdown
Contributor

We are done with our review for this PR and don't see any issues with it, lgtm!

@kianenigmakianenigma added D1-audited 👍 PR contains changes to fund-managing logic that has been properly reviewed and externally audited and removed A1-onice D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited labels Oct 7, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I want to do another self review tomorrow and then we proceed with the merge.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

bot merge

@ghost

ghost commented Oct 8, 2020

Copy link
Copy Markdown

Trying merge.

@ghost
ghost merged commit 90e8abf into masterOct 8, 2020
@ghost
ghost deleted the kiz-refactor-currency-to-vote branch October 8, 2020 14:50
ordian added a commit that referenced this pull request Oct 9, 2020
…up-updates
* master:
Async keystore + Authority-Discovery async/await (#7000)
Fixes logging of target names with dashes (#7281)
seal: Add automated weights for contract API calls (#7017)
add ss58 id for nodle (#7279)
Refactor CurrencyToVote (#6896)
bump-allocator: document & poison (#7277)
Reset flaming fir network (#7274)
reschedule (#6860)
Drop system cache for trie benchmarks (#7242)
client: improve log formatting (#7272)
Rework `InspectState` (#7271)
SystemOrigin trait (#7226)
Update ss58 registry for Dock network (#7263)
.maintain/monitoring: Add alert when continuous task ends (#7250)
Rename `TRANSACTION_VERSION` to `EXTRINSIC_VERSION` (#7258)
Split block announce processing into two parts (#6958)
Fix offchain election to respect the weight (#7215)
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.D1-audited 👍PR contains changes to fund-managing logic that has been properly reviewed and externally audited

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@kianenigma@bkchr@viniul@tomusdrw@shawntabrizi@gui1117@gnunicorn@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Refactor CurrencyToVote - #6896

Merged
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote
Oct 8, 2020
Merged

Refactor CurrencyToVote#6896
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote

Conversation

@kianenigma

@kianenigmakianenigma commented Aug 14, 2020

Copy link
Copy Markdown
Contributor

Both staking and elections-phragmen need Type CurrencyToVote that helps them convert T::Currency::Balance into u64. This values is then later on used for complex arithmetic where overflow might happen.

This PR refactors this in a few ways:

  1. Move away from Convert to a custom trait that accepts total_issuance as parameter. This avoid all the numerous calls to T::Currency::TotalIssuance(). Indeed, these calls will be a hit in the overlay cache but still it will incur some overhead, given that we were calling it many many many times (i.e. once per nominator, multiple times -- this is the order).
  2. Move everything, with much better documentation to support to allow reuse.

polkadot companion: paritytech/polkadot#1610

@kianenigmakianenigma added A0-please_review Pull request needs code review. B5-clientnoteworthy C1-low PR touches the given topic and has a low impact on builders. labels Aug 14, 2020
@kianenigma
kianenigma requested review from shawntabrizi and tomusdrw and removed request for andresilvaAugust 17, 2020 09:14
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/support/src/traits.rs
Comment threadbin/node/runtime/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs
Comment threadframe/support/src/traits.rs Outdated

/// A trait similar to `Convert` to convert values from `B` (i.e. the `Balance` type of the chain)
/// into u64, which is the standard numeric types used in election and other places where complex
/// calculation over balance type is needed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should the trait docs hint what to do with overflows? It seems that this might be a lossy conversion and it's not clear to me how to implement such trait for say U256 balance type just by looking at the trait definition.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I think end of the day that depends on the chain's logic and their builders decision.

In other words, I cannot give them a definitive advise here of what to do :D so I will just leave it open.

Comment threadframe/support/src/traits.rs Outdated

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

implementation looks good to me

Comment threadframe/support/src/traits.rs Outdated
Comment threadframe/support/src/traits.rs Outdated
kianenigmaand others added 3 commits August 17, 2020 16:20
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
…/substrate into kiz-refactor-currency-to-vote

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm

Comment threadframe/support/src/traits.rs Outdated

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm % Gui's grumbles

Comment threadframe/support/src/traits.rs

@shawntabrizishawntabrizi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

afaict looks good, although if anyone uses this new currency to vote in storage, bad things may happen. user discretion advised.

@kianenigmakianenigma added D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited and removed A8-mergeoncegreen labels Aug 21, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I am being a bit conservative here with the audit request. The PR itself really only duplicates the previous code, in a nicer and more optimised way. Nonetheless, I think the old logic of currency -> vote which has been silently propagated everywhere itself is worthy of an audit.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Keeping up to date; still needs an audit.

@bkchr

bkchr commented Oct 1, 2020

Copy link
Copy Markdown
Member

Also needs a master merge :D

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Should be first audited anyhow. Hopefully next week

@viniul

Copy link
Copy Markdown
Contributor

We are done with our review for this PR and don't see any issues with it, lgtm!

@kianenigmakianenigma added D1-audited 👍 PR contains changes to fund-managing logic that has been properly reviewed and externally audited and removed A1-onice D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited labels Oct 7, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I want to do another self review tomorrow and then we proceed with the merge.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

bot merge

@ghost

ghost commented Oct 8, 2020

Copy link
Copy Markdown

Trying merge.

@ghost
ghost merged commit 90e8abf into masterOct 8, 2020
@ghost
ghost deleted the kiz-refactor-currency-to-vote branch October 8, 2020 14:50
ordian added a commit that referenced this pull request Oct 9, 2020
…up-updates
* master:
Async keystore + Authority-Discovery async/await (#7000)
Fixes logging of target names with dashes (#7281)
seal: Add automated weights for contract API calls (#7017)
add ss58 id for nodle (#7279)
Refactor CurrencyToVote (#6896)
bump-allocator: document & poison (#7277)
Reset flaming fir network (#7274)
reschedule (#6860)
Drop system cache for trie benchmarks (#7242)
client: improve log formatting (#7272)
Rework `InspectState` (#7271)
SystemOrigin trait (#7226)
Update ss58 registry for Dock network (#7263)
.maintain/monitoring: Add alert when continuous task ends (#7250)
Rename `TRANSACTION_VERSION` to `EXTRINSIC_VERSION` (#7258)
Split block announce processing into two parts (#6958)
Fix offchain election to respect the weight (#7215)
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.D1-audited 👍PR contains changes to fund-managing logic that has been properly reviewed and externally audited

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@kianenigma@bkchr@viniul@tomusdrw@shawntabrizi@gui1117@gnunicorn@paritytech-ci
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.

Refactor CurrencyToVote - #6896

Merged
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote
Oct 8, 2020
Merged

Refactor CurrencyToVote#6896
13 commits merged into
masterfrom
kiz-refactor-currency-to-vote

Conversation

@kianenigma

@kianenigmakianenigma commented Aug 14, 2020

Copy link
Copy Markdown
Contributor

Both staking and elections-phragmen need Type CurrencyToVote that helps them convert T::Currency::Balance into u64. This values is then later on used for complex arithmetic where overflow might happen.

This PR refactors this in a few ways:

  1. Move away from Convert to a custom trait that accepts total_issuance as parameter. This avoid all the numerous calls to T::Currency::TotalIssuance(). Indeed, these calls will be a hit in the overlay cache but still it will incur some overhead, given that we were calling it many many many times (i.e. once per nominator, multiple times -- this is the order).
  2. Move everything, with much better documentation to support to allow reuse.

polkadot companion: paritytech/polkadot#1610

@kianenigmakianenigma added A0-please_review Pull request needs code review. B5-clientnoteworthy C1-low PR touches the given topic and has a low impact on builders. labels Aug 14, 2020
@kianenigma
kianenigma requested review from shawntabrizi and tomusdrw and removed request for andresilvaAugust 17, 2020 09:14
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/support/src/traits.rs
Comment threadbin/node/runtime/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs Outdated
Comment threadframe/staking/src/lib.rs
Comment threadframe/support/src/traits.rs Outdated

/// A trait similar to `Convert` to convert values from `B` (i.e. the `Balance` type of the chain)
/// into u64, which is the standard numeric types used in election and other places where complex
/// calculation over balance type is needed.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Should the trait docs hint what to do with overflows? It seems that this might be a lossy conversion and it's not clear to me how to implement such trait for say U256 balance type just by looking at the trait definition.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

I think end of the day that depends on the chain's logic and their builders decision.

In other words, I cannot give them a definitive advise here of what to do :D so I will just leave it open.

Comment threadframe/support/src/traits.rs Outdated

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

implementation looks good to me

Comment threadframe/support/src/traits.rs Outdated
Comment threadframe/support/src/traits.rs Outdated
kianenigmaand others added 3 commits August 17, 2020 16:20
Co-authored-by: Guillaume Thiolliere <gui.thiolliere@gmail.com>
…/substrate into kiz-refactor-currency-to-vote

@gui1117gui1117 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm

Comment threadframe/support/src/traits.rs Outdated

@tomusdrwtomusdrw left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

lgtm % Gui's grumbles

Comment threadframe/support/src/traits.rs

@shawntabrizishawntabrizi left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

afaict looks good, although if anyone uses this new currency to vote in storage, bad things may happen. user discretion advised.

@kianenigmakianenigma added D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited and removed A8-mergeoncegreen labels Aug 21, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I am being a bit conservative here with the audit request. The PR itself really only duplicates the previous code, in a nicer and more optimised way. Nonetheless, I think the old logic of currency -> vote which has been silently propagated everywhere itself is worthy of an audit.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Keeping up to date; still needs an audit.

@bkchr

bkchr commented Oct 1, 2020

Copy link
Copy Markdown
Member

Also needs a master merge :D

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

Should be first audited anyhow. Hopefully next week

@viniul

Copy link
Copy Markdown
Contributor

We are done with our review for this PR and don't see any issues with it, lgtm!

@kianenigmakianenigma added D1-audited 👍 PR contains changes to fund-managing logic that has been properly reviewed and externally audited and removed A1-onice D9-needsaudit 👮 PR contains changes to fund-managing logic that should be properly reviewed and externally audited labels Oct 7, 2020
@kianenigma

Copy link
Copy Markdown
ContributorAuthor

I want to do another self review tomorrow and then we proceed with the merge.

@kianenigma

Copy link
Copy Markdown
ContributorAuthor

bot merge

@ghost

ghost commented Oct 8, 2020

Copy link
Copy Markdown

Trying merge.

@ghost
ghost merged commit 90e8abf into masterOct 8, 2020
@ghost
ghost deleted the kiz-refactor-currency-to-vote branch October 8, 2020 14:50
ordian added a commit that referenced this pull request Oct 9, 2020
…up-updates
* master:
Async keystore + Authority-Discovery async/await (#7000)
Fixes logging of target names with dashes (#7281)
seal: Add automated weights for contract API calls (#7017)
add ss58 id for nodle (#7279)
Refactor CurrencyToVote (#6896)
bump-allocator: document & poison (#7277)
Reset flaming fir network (#7274)
reschedule (#6860)
Drop system cache for trie benchmarks (#7242)
client: improve log formatting (#7272)
Rework `InspectState` (#7271)
SystemOrigin trait (#7226)
Update ss58 registry for Dock network (#7263)
.maintain/monitoring: Add alert when continuous task ends (#7250)
Rename `TRANSACTION_VERSION` to `EXTRINSIC_VERSION` (#7258)
Split block announce processing into two parts (#6958)
Fix offchain election to respect the weight (#7215)
This pull request was closed.
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

C1-lowPR touches the given topic and has a low impact on builders.D1-audited 👍PR contains changes to fund-managing logic that has been properly reviewed and externally audited

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@kianenigma@bkchr@viniul@tomusdrw@shawntabrizi@gui1117@gnunicorn@paritytech-ci