drain and fill channel plugin - #22

Merged
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill
Nov 11, 2019
Merged

drain and fill channel plugin#22
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill

Conversation

@m-schmoock

@m-schmoockm-schmoock commented May 9, 2019

Copy link
Copy Markdown
Member

This plugin offers three new commands: drain, fill and setbalance.
It works similar to the rebalance plugin but with some key differences:

  • Does not need a second scid parameter but figures out the other one by routing.
  • Can have chunked payments that increases routing probability but can result in partial completion. If cunks is not set, number of required chunks is autodetected.
  • Does not consume or calculate msat amounts, but uses percentages. Default 100 for drain and fill and 50 for setbalance.

Note: If draining 100%, the plugin guesses the correct HTLC fee by try and error. For new servers that report HTLC fee via exception (ElementsProject/lightning#2691) it takes the exact amount.

Issues:

  • Can run into "route not found" errors afters several "drain"s on multiple channels. Reason yet unknown.

@m-schmoockm-schmoock added enhancement New feature or request work in progress This pull request cannot be merged yet labels May 9, 2019
@m-schmoockm-schmoock changed the title doc: drain plugin README.md and usagedrain and fill channel pluginMay 9, 2019
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from 4e5a008 to de0383dCompareMay 14, 2019 15:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from f0e0a88 to 0b533dbCompareMay 23, 2019 09:58
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 2 times, most recently from 5475d81 to eeaaba1CompareJune 6, 2019 22:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 3 times, most recently from ac762c3 to f235c65CompareJune 13, 2019 14:25
@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Jul 1, 2019
@m-schmoock

m-schmoock commented Jul 1, 2019

Copy link
Copy Markdown
MemberAuthor

I removed the "work in progress" TAG, as the plugin is very usable aready and I dont have good clues about the remaining TODOs and optimizations.

I could need a review now... volunteers?

Note: If you get "Could not find a route" errors, when draining a channel, try using lightning-cli drain <scid> 100 4 it tells the pluging to drain by 100% using 4 chunks. Im not sure, but it feels we have routing issues since the dijkstra update. Maybe reviewer finds another reason... The "fill" command doesn't have routing issues... Everytime I go through the generated 'exclude' list for the failed drain routing, it seems correctly build...

@darosiordarosior 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.

Here is what caught my eyes (it's mostly stylish) :

  • A docstring by function would be useful
  • Type hints : you use them for some function, and not for some other, or even for some arguments of a function and not some other.
  • Some nits (see below)

I also got an error when trying drain :

Error while processing drain: TypeError('__int__ returned non-int (type float)')

Comment threaddrain/README.md Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

This comment has been minimized.

@darosior

This comment has been minimized.

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Jul 9, 2019
@darosior

Copy link
Copy Markdown
Member

Btw if you think it's mergeable you should remove the WIP tag

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Oct 23, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

@darosior

I removed the WIP flag, still Im going to fix this one way or another, now that we talked about this issues it is at least known. If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

F.y.i. I will have more time on from November, since I reduced my regular job to just 25hrs a week :). This was going to be my first task anyway.

Great ! To work on Lightning ?

Yes !

@darosior

Copy link
Copy Markdown
Member

If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

I don't have one so we'll have to wait for ackbot ;-)

@darosiordarosior 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.

Mostly nits and questions, which most of them will need user testing to be resolved. I think it's mergeable (modulo cleanup and pylightning version ;-))

Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/requirements.txt Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

I updated the documentation a bit to make clear how it is currently supposed to work.

@darosior

darosior commented Oct 25, 2019

Copy link
Copy Markdown
Member

Ok so I have a channel with 60% theirs, 40% ours.

 ├────────┼─────────────┤ 245x2x0

I think the wording is misleading as if I want to drain, say 30 percent of the channel (so that the balance results in 90% theirs, 10% ours)

 ├──┼──────────────────────┤ 245x2x0

I dont

cli drain <scid> 30

But

cli drain <scid> 90

So effectively passing to the drain command the expected percent on their side. That's why I proposed to change the wording to :

cli set_theirs <scid> 90

And, if we keep the drain command, to pass it the expected percent to drain from my side (30%).

The same goes for fill :
Now that they effectively have 90% of the channel capacity,

 ├──┼──────────────────────┤ 245x2x0

and I want my side to have 90% capacity (so passing from ours: 10%; theirs: 90% to ours: 90%; theirs: 10%)

 ├────────────────────┼─┤ 245x2x0

I would expect to drain from them 80% of the capacity (hence fill 80% on my side) but in order to do that with the current wording I have to :

cli fill <scid> 90

That's why I propose to rename it to

cli set_ours <scid> 90

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Oct 26, 2019
Comment threaddrain/drain.py Outdated
@cdecker

Copy link
Copy Markdown
Contributor

Sorry for the delay, I seem to have missed the non-WIP window 😉

I'm quite happy to merge the plugin even if it has a edge-case that may fail some times. fwiw I have a c-lightning PR pending that should allow us to start testing plugins, so pinning down the issue and reproducing it will become easier: ElementsProject/lightning#3218

Comment threaddrain/README.md
lightning-cli fill scid [percentage] [chunks] [maxfeepercent] [retry_for] [exemptfee]
```

Another useful command is the `setbalance` that will fill up or drain your side

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.

🎉 ! 😁

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Nov 8, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

Hi,

After my first two days of my new 'Altersteilzeit' I managed to get this ready.

@darosior I added the setbalance command and rewrote the drainfill to behave more intuitive. thanks for the feedback. The new command works like a charm.
@cdecker I finally removed the WIP tag. Can we make final reviews and merge?

cheers,
Michael

@m-schmoock

m-schmoock commented Nov 8, 2019

Copy link
Copy Markdown
MemberAuthor

You guys also might want to test this, but for my setup and testnet and mainnet it works smoothly.

@darosior

Copy link
Copy Markdown
Member

testnet and mainnet it works smoothly.

So you don't have the spontaneous errors you were talking about ?

@m-schmoock

m-schmoock commented Nov 9, 2019

Copy link
Copy Markdown
MemberAuthor

Still have them from time to time, which is why I think it's not plug-in but daemon related.
It would also be good to know if I am the only one experiencing them...

@darosiordarosior 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.

ACK 2f825de

Tested this on my node, and it behaves exactly as I would expect it to behave. Playing with the chunk feature allows to rebalance channels it was not possible to rebalance previously: this is a really cool plugin ! 🎉

@cdecker
cdecker merged commit 0881322 into lightningd:masterNov 11, 2019
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@m-schmoock@darosior@cdecker@gallizoltan
, '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

drain and fill channel plugin - #22

Merged
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill
Nov 11, 2019
Merged

drain and fill channel plugin#22
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill

Conversation

@m-schmoock

@m-schmoockm-schmoock commented May 9, 2019

Copy link
Copy Markdown
Member

This plugin offers three new commands: drain, fill and setbalance.
It works similar to the rebalance plugin but with some key differences:

  • Does not need a second scid parameter but figures out the other one by routing.
  • Can have chunked payments that increases routing probability but can result in partial completion. If cunks is not set, number of required chunks is autodetected.
  • Does not consume or calculate msat amounts, but uses percentages. Default 100 for drain and fill and 50 for setbalance.

Note: If draining 100%, the plugin guesses the correct HTLC fee by try and error. For new servers that report HTLC fee via exception (ElementsProject/lightning#2691) it takes the exact amount.

Issues:

  • Can run into "route not found" errors afters several "drain"s on multiple channels. Reason yet unknown.

@m-schmoockm-schmoock added enhancement New feature or request work in progress This pull request cannot be merged yet labels May 9, 2019
@m-schmoockm-schmoock changed the title doc: drain plugin README.md and usagedrain and fill channel pluginMay 9, 2019
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from 4e5a008 to de0383dCompareMay 14, 2019 15:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from f0e0a88 to 0b533dbCompareMay 23, 2019 09:58
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 2 times, most recently from 5475d81 to eeaaba1CompareJune 6, 2019 22:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 3 times, most recently from ac762c3 to f235c65CompareJune 13, 2019 14:25
@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Jul 1, 2019
@m-schmoock

m-schmoock commented Jul 1, 2019

Copy link
Copy Markdown
MemberAuthor

I removed the "work in progress" TAG, as the plugin is very usable aready and I dont have good clues about the remaining TODOs and optimizations.

I could need a review now... volunteers?

Note: If you get "Could not find a route" errors, when draining a channel, try using lightning-cli drain <scid> 100 4 it tells the pluging to drain by 100% using 4 chunks. Im not sure, but it feels we have routing issues since the dijkstra update. Maybe reviewer finds another reason... The "fill" command doesn't have routing issues... Everytime I go through the generated 'exclude' list for the failed drain routing, it seems correctly build...

@darosiordarosior 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.

Here is what caught my eyes (it's mostly stylish) :

  • A docstring by function would be useful
  • Type hints : you use them for some function, and not for some other, or even for some arguments of a function and not some other.
  • Some nits (see below)

I also got an error when trying drain :

Error while processing drain: TypeError('__int__ returned non-int (type float)')

Comment threaddrain/README.md Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

This comment has been minimized.

@darosior

This comment has been minimized.

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Jul 9, 2019
@darosior

Copy link
Copy Markdown
Member

Btw if you think it's mergeable you should remove the WIP tag

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Oct 23, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

@darosior

I removed the WIP flag, still Im going to fix this one way or another, now that we talked about this issues it is at least known. If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

F.y.i. I will have more time on from November, since I reduced my regular job to just 25hrs a week :). This was going to be my first task anyway.

Great ! To work on Lightning ?

Yes !

@darosior

Copy link
Copy Markdown
Member

If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

I don't have one so we'll have to wait for ackbot ;-)

@darosiordarosior 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.

Mostly nits and questions, which most of them will need user testing to be resolved. I think it's mergeable (modulo cleanup and pylightning version ;-))

Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/requirements.txt Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

I updated the documentation a bit to make clear how it is currently supposed to work.

@darosior

darosior commented Oct 25, 2019

Copy link
Copy Markdown
Member

Ok so I have a channel with 60% theirs, 40% ours.

 ├────────┼─────────────┤ 245x2x0

I think the wording is misleading as if I want to drain, say 30 percent of the channel (so that the balance results in 90% theirs, 10% ours)

 ├──┼──────────────────────┤ 245x2x0

I dont

cli drain <scid> 30

But

cli drain <scid> 90

So effectively passing to the drain command the expected percent on their side. That's why I proposed to change the wording to :

cli set_theirs <scid> 90

And, if we keep the drain command, to pass it the expected percent to drain from my side (30%).

The same goes for fill :
Now that they effectively have 90% of the channel capacity,

 ├──┼──────────────────────┤ 245x2x0

and I want my side to have 90% capacity (so passing from ours: 10%; theirs: 90% to ours: 90%; theirs: 10%)

 ├────────────────────┼─┤ 245x2x0

I would expect to drain from them 80% of the capacity (hence fill 80% on my side) but in order to do that with the current wording I have to :

cli fill <scid> 90

That's why I propose to rename it to

cli set_ours <scid> 90

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Oct 26, 2019
Comment threaddrain/drain.py Outdated
@cdecker

Copy link
Copy Markdown
Contributor

Sorry for the delay, I seem to have missed the non-WIP window 😉

I'm quite happy to merge the plugin even if it has a edge-case that may fail some times. fwiw I have a c-lightning PR pending that should allow us to start testing plugins, so pinning down the issue and reproducing it will become easier: ElementsProject/lightning#3218

Comment threaddrain/README.md
lightning-cli fill scid [percentage] [chunks] [maxfeepercent] [retry_for] [exemptfee]
```

Another useful command is the `setbalance` that will fill up or drain your side

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.

🎉 ! 😁

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Nov 8, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

Hi,

After my first two days of my new 'Altersteilzeit' I managed to get this ready.

@darosior I added the setbalance command and rewrote the drainfill to behave more intuitive. thanks for the feedback. The new command works like a charm.
@cdecker I finally removed the WIP tag. Can we make final reviews and merge?

cheers,
Michael

@m-schmoock

m-schmoock commented Nov 8, 2019

Copy link
Copy Markdown
MemberAuthor

You guys also might want to test this, but for my setup and testnet and mainnet it works smoothly.

@darosior

Copy link
Copy Markdown
Member

testnet and mainnet it works smoothly.

So you don't have the spontaneous errors you were talking about ?

@m-schmoock

m-schmoock commented Nov 9, 2019

Copy link
Copy Markdown
MemberAuthor

Still have them from time to time, which is why I think it's not plug-in but daemon related.
It would also be good to know if I am the only one experiencing them...

@darosiordarosior 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.

ACK 2f825de

Tested this on my node, and it behaves exactly as I would expect it to behave. Playing with the chunk feature allows to rebalance channels it was not possible to rebalance previously: this is a really cool plugin ! 🎉

@cdecker
cdecker merged commit 0881322 into lightningd:masterNov 11, 2019
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@m-schmoock@darosior@cdecker@gallizoltan
, '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

drain and fill channel plugin - #22

Merged
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill
Nov 11, 2019
Merged

drain and fill channel plugin#22
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill

Conversation

@m-schmoock

@m-schmoockm-schmoock commented May 9, 2019

Copy link
Copy Markdown
Member

This plugin offers three new commands: drain, fill and setbalance.
It works similar to the rebalance plugin but with some key differences:

  • Does not need a second scid parameter but figures out the other one by routing.
  • Can have chunked payments that increases routing probability but can result in partial completion. If cunks is not set, number of required chunks is autodetected.
  • Does not consume or calculate msat amounts, but uses percentages. Default 100 for drain and fill and 50 for setbalance.

Note: If draining 100%, the plugin guesses the correct HTLC fee by try and error. For new servers that report HTLC fee via exception (ElementsProject/lightning#2691) it takes the exact amount.

Issues:

  • Can run into "route not found" errors afters several "drain"s on multiple channels. Reason yet unknown.

@m-schmoockm-schmoock added enhancement New feature or request work in progress This pull request cannot be merged yet labels May 9, 2019
@m-schmoockm-schmoock changed the title doc: drain plugin README.md and usagedrain and fill channel pluginMay 9, 2019
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from 4e5a008 to de0383dCompareMay 14, 2019 15:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from f0e0a88 to 0b533dbCompareMay 23, 2019 09:58
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 2 times, most recently from 5475d81 to eeaaba1CompareJune 6, 2019 22:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 3 times, most recently from ac762c3 to f235c65CompareJune 13, 2019 14:25
@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Jul 1, 2019
@m-schmoock

m-schmoock commented Jul 1, 2019

Copy link
Copy Markdown
MemberAuthor

I removed the "work in progress" TAG, as the plugin is very usable aready and I dont have good clues about the remaining TODOs and optimizations.

I could need a review now... volunteers?

Note: If you get "Could not find a route" errors, when draining a channel, try using lightning-cli drain <scid> 100 4 it tells the pluging to drain by 100% using 4 chunks. Im not sure, but it feels we have routing issues since the dijkstra update. Maybe reviewer finds another reason... The "fill" command doesn't have routing issues... Everytime I go through the generated 'exclude' list for the failed drain routing, it seems correctly build...

@darosiordarosior 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.

Here is what caught my eyes (it's mostly stylish) :

  • A docstring by function would be useful
  • Type hints : you use them for some function, and not for some other, or even for some arguments of a function and not some other.
  • Some nits (see below)

I also got an error when trying drain :

Error while processing drain: TypeError('__int__ returned non-int (type float)')

Comment threaddrain/README.md Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

This comment has been minimized.

@darosior

This comment has been minimized.

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Jul 9, 2019
@darosior

Copy link
Copy Markdown
Member

Btw if you think it's mergeable you should remove the WIP tag

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Oct 23, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

@darosior

I removed the WIP flag, still Im going to fix this one way or another, now that we talked about this issues it is at least known. If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

F.y.i. I will have more time on from November, since I reduced my regular job to just 25hrs a week :). This was going to be my first task anyway.

Great ! To work on Lightning ?

Yes !

@darosior

Copy link
Copy Markdown
Member

If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

I don't have one so we'll have to wait for ackbot ;-)

@darosiordarosior 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.

Mostly nits and questions, which most of them will need user testing to be resolved. I think it's mergeable (modulo cleanup and pylightning version ;-))

Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/requirements.txt Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

I updated the documentation a bit to make clear how it is currently supposed to work.

@darosior

darosior commented Oct 25, 2019

Copy link
Copy Markdown
Member

Ok so I have a channel with 60% theirs, 40% ours.

 ├────────┼─────────────┤ 245x2x0

I think the wording is misleading as if I want to drain, say 30 percent of the channel (so that the balance results in 90% theirs, 10% ours)

 ├──┼──────────────────────┤ 245x2x0

I dont

cli drain <scid> 30

But

cli drain <scid> 90

So effectively passing to the drain command the expected percent on their side. That's why I proposed to change the wording to :

cli set_theirs <scid> 90

And, if we keep the drain command, to pass it the expected percent to drain from my side (30%).

The same goes for fill :
Now that they effectively have 90% of the channel capacity,

 ├──┼──────────────────────┤ 245x2x0

and I want my side to have 90% capacity (so passing from ours: 10%; theirs: 90% to ours: 90%; theirs: 10%)

 ├────────────────────┼─┤ 245x2x0

I would expect to drain from them 80% of the capacity (hence fill 80% on my side) but in order to do that with the current wording I have to :

cli fill <scid> 90

That's why I propose to rename it to

cli set_ours <scid> 90

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Oct 26, 2019
Comment threaddrain/drain.py Outdated
@cdecker

Copy link
Copy Markdown
Contributor

Sorry for the delay, I seem to have missed the non-WIP window 😉

I'm quite happy to merge the plugin even if it has a edge-case that may fail some times. fwiw I have a c-lightning PR pending that should allow us to start testing plugins, so pinning down the issue and reproducing it will become easier: ElementsProject/lightning#3218

Comment threaddrain/README.md
lightning-cli fill scid [percentage] [chunks] [maxfeepercent] [retry_for] [exemptfee]
```

Another useful command is the `setbalance` that will fill up or drain your side

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.

🎉 ! 😁

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Nov 8, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

Hi,

After my first two days of my new 'Altersteilzeit' I managed to get this ready.

@darosior I added the setbalance command and rewrote the drainfill to behave more intuitive. thanks for the feedback. The new command works like a charm.
@cdecker I finally removed the WIP tag. Can we make final reviews and merge?

cheers,
Michael

@m-schmoock

m-schmoock commented Nov 8, 2019

Copy link
Copy Markdown
MemberAuthor

You guys also might want to test this, but for my setup and testnet and mainnet it works smoothly.

@darosior

Copy link
Copy Markdown
Member

testnet and mainnet it works smoothly.

So you don't have the spontaneous errors you were talking about ?

@m-schmoock

m-schmoock commented Nov 9, 2019

Copy link
Copy Markdown
MemberAuthor

Still have them from time to time, which is why I think it's not plug-in but daemon related.
It would also be good to know if I am the only one experiencing them...

@darosiordarosior 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.

ACK 2f825de

Tested this on my node, and it behaves exactly as I would expect it to behave. Playing with the chunk feature allows to rebalance channels it was not possible to rebalance previously: this is a really cool plugin ! 🎉

@cdecker
cdecker merged commit 0881322 into lightningd:masterNov 11, 2019
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@m-schmoock@darosior@cdecker@gallizoltan
, '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

drain and fill channel plugin - #22

Merged
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill
Nov 11, 2019
Merged

drain and fill channel plugin#22
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill

Conversation

@m-schmoock

@m-schmoockm-schmoock commented May 9, 2019

Copy link
Copy Markdown
Member

This plugin offers three new commands: drain, fill and setbalance.
It works similar to the rebalance plugin but with some key differences:

  • Does not need a second scid parameter but figures out the other one by routing.
  • Can have chunked payments that increases routing probability but can result in partial completion. If cunks is not set, number of required chunks is autodetected.
  • Does not consume or calculate msat amounts, but uses percentages. Default 100 for drain and fill and 50 for setbalance.

Note: If draining 100%, the plugin guesses the correct HTLC fee by try and error. For new servers that report HTLC fee via exception (ElementsProject/lightning#2691) it takes the exact amount.

Issues:

  • Can run into "route not found" errors afters several "drain"s on multiple channels. Reason yet unknown.

@m-schmoockm-schmoock added enhancement New feature or request work in progress This pull request cannot be merged yet labels May 9, 2019
@m-schmoockm-schmoock changed the title doc: drain plugin README.md and usagedrain and fill channel pluginMay 9, 2019
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from 4e5a008 to de0383dCompareMay 14, 2019 15:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from f0e0a88 to 0b533dbCompareMay 23, 2019 09:58
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 2 times, most recently from 5475d81 to eeaaba1CompareJune 6, 2019 22:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 3 times, most recently from ac762c3 to f235c65CompareJune 13, 2019 14:25
@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Jul 1, 2019
@m-schmoock

m-schmoock commented Jul 1, 2019

Copy link
Copy Markdown
MemberAuthor

I removed the "work in progress" TAG, as the plugin is very usable aready and I dont have good clues about the remaining TODOs and optimizations.

I could need a review now... volunteers?

Note: If you get "Could not find a route" errors, when draining a channel, try using lightning-cli drain <scid> 100 4 it tells the pluging to drain by 100% using 4 chunks. Im not sure, but it feels we have routing issues since the dijkstra update. Maybe reviewer finds another reason... The "fill" command doesn't have routing issues... Everytime I go through the generated 'exclude' list for the failed drain routing, it seems correctly build...

@darosiordarosior 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.

Here is what caught my eyes (it's mostly stylish) :

  • A docstring by function would be useful
  • Type hints : you use them for some function, and not for some other, or even for some arguments of a function and not some other.
  • Some nits (see below)

I also got an error when trying drain :

Error while processing drain: TypeError('__int__ returned non-int (type float)')

Comment threaddrain/README.md Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

This comment has been minimized.

@darosior

This comment has been minimized.

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Jul 9, 2019
@darosior

Copy link
Copy Markdown
Member

Btw if you think it's mergeable you should remove the WIP tag

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Oct 23, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

@darosior

I removed the WIP flag, still Im going to fix this one way or another, now that we talked about this issues it is at least known. If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

F.y.i. I will have more time on from November, since I reduced my regular job to just 25hrs a week :). This was going to be my first task anyway.

Great ! To work on Lightning ?

Yes !

@darosior

Copy link
Copy Markdown
Member

If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

I don't have one so we'll have to wait for ackbot ;-)

@darosiordarosior 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.

Mostly nits and questions, which most of them will need user testing to be resolved. I think it's mergeable (modulo cleanup and pylightning version ;-))

Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/requirements.txt Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

I updated the documentation a bit to make clear how it is currently supposed to work.

@darosior

darosior commented Oct 25, 2019

Copy link
Copy Markdown
Member

Ok so I have a channel with 60% theirs, 40% ours.

 ├────────┼─────────────┤ 245x2x0

I think the wording is misleading as if I want to drain, say 30 percent of the channel (so that the balance results in 90% theirs, 10% ours)

 ├──┼──────────────────────┤ 245x2x0

I dont

cli drain <scid> 30

But

cli drain <scid> 90

So effectively passing to the drain command the expected percent on their side. That's why I proposed to change the wording to :

cli set_theirs <scid> 90

And, if we keep the drain command, to pass it the expected percent to drain from my side (30%).

The same goes for fill :
Now that they effectively have 90% of the channel capacity,

 ├──┼──────────────────────┤ 245x2x0

and I want my side to have 90% capacity (so passing from ours: 10%; theirs: 90% to ours: 90%; theirs: 10%)

 ├────────────────────┼─┤ 245x2x0

I would expect to drain from them 80% of the capacity (hence fill 80% on my side) but in order to do that with the current wording I have to :

cli fill <scid> 90

That's why I propose to rename it to

cli set_ours <scid> 90

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Oct 26, 2019
Comment threaddrain/drain.py Outdated
@cdecker

Copy link
Copy Markdown
Contributor

Sorry for the delay, I seem to have missed the non-WIP window 😉

I'm quite happy to merge the plugin even if it has a edge-case that may fail some times. fwiw I have a c-lightning PR pending that should allow us to start testing plugins, so pinning down the issue and reproducing it will become easier: ElementsProject/lightning#3218

Comment threaddrain/README.md
lightning-cli fill scid [percentage] [chunks] [maxfeepercent] [retry_for] [exemptfee]
```

Another useful command is the `setbalance` that will fill up or drain your side

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.

🎉 ! 😁

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Nov 8, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

Hi,

After my first two days of my new 'Altersteilzeit' I managed to get this ready.

@darosior I added the setbalance command and rewrote the drainfill to behave more intuitive. thanks for the feedback. The new command works like a charm.
@cdecker I finally removed the WIP tag. Can we make final reviews and merge?

cheers,
Michael

@m-schmoock

m-schmoock commented Nov 8, 2019

Copy link
Copy Markdown
MemberAuthor

You guys also might want to test this, but for my setup and testnet and mainnet it works smoothly.

@darosior

Copy link
Copy Markdown
Member

testnet and mainnet it works smoothly.

So you don't have the spontaneous errors you were talking about ?

@m-schmoock

m-schmoock commented Nov 9, 2019

Copy link
Copy Markdown
MemberAuthor

Still have them from time to time, which is why I think it's not plug-in but daemon related.
It would also be good to know if I am the only one experiencing them...

@darosiordarosior 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.

ACK 2f825de

Tested this on my node, and it behaves exactly as I would expect it to behave. Playing with the chunk feature allows to rebalance channels it was not possible to rebalance previously: this is a really cool plugin ! 🎉

@cdecker
cdecker merged commit 0881322 into lightningd:masterNov 11, 2019
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@m-schmoock@darosior@cdecker@gallizoltan
, '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

drain and fill channel plugin - #22

Merged
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill
Nov 11, 2019
Merged

drain and fill channel plugin#22
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill

Conversation

@m-schmoock

@m-schmoockm-schmoock commented May 9, 2019

Copy link
Copy Markdown
Member

This plugin offers three new commands: drain, fill and setbalance.
It works similar to the rebalance plugin but with some key differences:

  • Does not need a second scid parameter but figures out the other one by routing.
  • Can have chunked payments that increases routing probability but can result in partial completion. If cunks is not set, number of required chunks is autodetected.
  • Does not consume or calculate msat amounts, but uses percentages. Default 100 for drain and fill and 50 for setbalance.

Note: If draining 100%, the plugin guesses the correct HTLC fee by try and error. For new servers that report HTLC fee via exception (ElementsProject/lightning#2691) it takes the exact amount.

Issues:

  • Can run into "route not found" errors afters several "drain"s on multiple channels. Reason yet unknown.

@m-schmoockm-schmoock added enhancement New feature or request work in progress This pull request cannot be merged yet labels May 9, 2019
@m-schmoockm-schmoock changed the title doc: drain plugin README.md and usagedrain and fill channel pluginMay 9, 2019
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from 4e5a008 to de0383dCompareMay 14, 2019 15:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from f0e0a88 to 0b533dbCompareMay 23, 2019 09:58
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 2 times, most recently from 5475d81 to eeaaba1CompareJune 6, 2019 22:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 3 times, most recently from ac762c3 to f235c65CompareJune 13, 2019 14:25
@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Jul 1, 2019
@m-schmoock

m-schmoock commented Jul 1, 2019

Copy link
Copy Markdown
MemberAuthor

I removed the "work in progress" TAG, as the plugin is very usable aready and I dont have good clues about the remaining TODOs and optimizations.

I could need a review now... volunteers?

Note: If you get "Could not find a route" errors, when draining a channel, try using lightning-cli drain <scid> 100 4 it tells the pluging to drain by 100% using 4 chunks. Im not sure, but it feels we have routing issues since the dijkstra update. Maybe reviewer finds another reason... The "fill" command doesn't have routing issues... Everytime I go through the generated 'exclude' list for the failed drain routing, it seems correctly build...

@darosiordarosior 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.

Here is what caught my eyes (it's mostly stylish) :

  • A docstring by function would be useful
  • Type hints : you use them for some function, and not for some other, or even for some arguments of a function and not some other.
  • Some nits (see below)

I also got an error when trying drain :

Error while processing drain: TypeError('__int__ returned non-int (type float)')

Comment threaddrain/README.md Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

This comment has been minimized.

@darosior

This comment has been minimized.

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Jul 9, 2019
@darosior

Copy link
Copy Markdown
Member

Btw if you think it's mergeable you should remove the WIP tag

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Oct 23, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

@darosior

I removed the WIP flag, still Im going to fix this one way or another, now that we talked about this issues it is at least known. If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

F.y.i. I will have more time on from November, since I reduced my regular job to just 25hrs a week :). This was going to be my first task anyway.

Great ! To work on Lightning ?

Yes !

@darosior

Copy link
Copy Markdown
Member

If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

I don't have one so we'll have to wait for ackbot ;-)

@darosiordarosior 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.

Mostly nits and questions, which most of them will need user testing to be resolved. I think it's mergeable (modulo cleanup and pylightning version ;-))

Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/requirements.txt Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

I updated the documentation a bit to make clear how it is currently supposed to work.

@darosior

darosior commented Oct 25, 2019

Copy link
Copy Markdown
Member

Ok so I have a channel with 60% theirs, 40% ours.

 ├────────┼─────────────┤ 245x2x0

I think the wording is misleading as if I want to drain, say 30 percent of the channel (so that the balance results in 90% theirs, 10% ours)

 ├──┼──────────────────────┤ 245x2x0

I dont

cli drain <scid> 30

But

cli drain <scid> 90

So effectively passing to the drain command the expected percent on their side. That's why I proposed to change the wording to :

cli set_theirs <scid> 90

And, if we keep the drain command, to pass it the expected percent to drain from my side (30%).

The same goes for fill :
Now that they effectively have 90% of the channel capacity,

 ├──┼──────────────────────┤ 245x2x0

and I want my side to have 90% capacity (so passing from ours: 10%; theirs: 90% to ours: 90%; theirs: 10%)

 ├────────────────────┼─┤ 245x2x0

I would expect to drain from them 80% of the capacity (hence fill 80% on my side) but in order to do that with the current wording I have to :

cli fill <scid> 90

That's why I propose to rename it to

cli set_ours <scid> 90

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Oct 26, 2019
Comment threaddrain/drain.py Outdated
@cdecker

Copy link
Copy Markdown
Contributor

Sorry for the delay, I seem to have missed the non-WIP window 😉

I'm quite happy to merge the plugin even if it has a edge-case that may fail some times. fwiw I have a c-lightning PR pending that should allow us to start testing plugins, so pinning down the issue and reproducing it will become easier: ElementsProject/lightning#3218

Comment threaddrain/README.md
lightning-cli fill scid [percentage] [chunks] [maxfeepercent] [retry_for] [exemptfee]
```

Another useful command is the `setbalance` that will fill up or drain your side

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.

🎉 ! 😁

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Nov 8, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

Hi,

After my first two days of my new 'Altersteilzeit' I managed to get this ready.

@darosior I added the setbalance command and rewrote the drainfill to behave more intuitive. thanks for the feedback. The new command works like a charm.
@cdecker I finally removed the WIP tag. Can we make final reviews and merge?

cheers,
Michael

@m-schmoock

m-schmoock commented Nov 8, 2019

Copy link
Copy Markdown
MemberAuthor

You guys also might want to test this, but for my setup and testnet and mainnet it works smoothly.

@darosior

Copy link
Copy Markdown
Member

testnet and mainnet it works smoothly.

So you don't have the spontaneous errors you were talking about ?

@m-schmoock

m-schmoock commented Nov 9, 2019

Copy link
Copy Markdown
MemberAuthor

Still have them from time to time, which is why I think it's not plug-in but daemon related.
It would also be good to know if I am the only one experiencing them...

@darosiordarosior 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.

ACK 2f825de

Tested this on my node, and it behaves exactly as I would expect it to behave. Playing with the chunk feature allows to rebalance channels it was not possible to rebalance previously: this is a really cool plugin ! 🎉

@cdecker
cdecker merged commit 0881322 into lightningd:masterNov 11, 2019
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@m-schmoock@darosior@cdecker@gallizoltan
, '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

drain and fill channel plugin - #22

Merged
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill
Nov 11, 2019
Merged

drain and fill channel plugin#22
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill

Conversation

@m-schmoock

@m-schmoockm-schmoock commented May 9, 2019

Copy link
Copy Markdown
Member

This plugin offers three new commands: drain, fill and setbalance.
It works similar to the rebalance plugin but with some key differences:

  • Does not need a second scid parameter but figures out the other one by routing.
  • Can have chunked payments that increases routing probability but can result in partial completion. If cunks is not set, number of required chunks is autodetected.
  • Does not consume or calculate msat amounts, but uses percentages. Default 100 for drain and fill and 50 for setbalance.

Note: If draining 100%, the plugin guesses the correct HTLC fee by try and error. For new servers that report HTLC fee via exception (ElementsProject/lightning#2691) it takes the exact amount.

Issues:

  • Can run into "route not found" errors afters several "drain"s on multiple channels. Reason yet unknown.

@m-schmoockm-schmoock added enhancement New feature or request work in progress This pull request cannot be merged yet labels May 9, 2019
@m-schmoockm-schmoock changed the title doc: drain plugin README.md and usagedrain and fill channel pluginMay 9, 2019
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from 4e5a008 to de0383dCompareMay 14, 2019 15:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from f0e0a88 to 0b533dbCompareMay 23, 2019 09:58
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 2 times, most recently from 5475d81 to eeaaba1CompareJune 6, 2019 22:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 3 times, most recently from ac762c3 to f235c65CompareJune 13, 2019 14:25
@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Jul 1, 2019
@m-schmoock

m-schmoock commented Jul 1, 2019

Copy link
Copy Markdown
MemberAuthor

I removed the "work in progress" TAG, as the plugin is very usable aready and I dont have good clues about the remaining TODOs and optimizations.

I could need a review now... volunteers?

Note: If you get "Could not find a route" errors, when draining a channel, try using lightning-cli drain <scid> 100 4 it tells the pluging to drain by 100% using 4 chunks. Im not sure, but it feels we have routing issues since the dijkstra update. Maybe reviewer finds another reason... The "fill" command doesn't have routing issues... Everytime I go through the generated 'exclude' list for the failed drain routing, it seems correctly build...

@darosiordarosior 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.

Here is what caught my eyes (it's mostly stylish) :

  • A docstring by function would be useful
  • Type hints : you use them for some function, and not for some other, or even for some arguments of a function and not some other.
  • Some nits (see below)

I also got an error when trying drain :

Error while processing drain: TypeError('__int__ returned non-int (type float)')

Comment threaddrain/README.md Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

This comment has been minimized.

@darosior

This comment has been minimized.

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Jul 9, 2019
@darosior

Copy link
Copy Markdown
Member

Btw if you think it's mergeable you should remove the WIP tag

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Oct 23, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

@darosior

I removed the WIP flag, still Im going to fix this one way or another, now that we talked about this issues it is at least known. If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

F.y.i. I will have more time on from November, since I reduced my regular job to just 25hrs a week :). This was going to be my first task anyway.

Great ! To work on Lightning ?

Yes !

@darosior

Copy link
Copy Markdown
Member

If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

I don't have one so we'll have to wait for ackbot ;-)

@darosiordarosior 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.

Mostly nits and questions, which most of them will need user testing to be resolved. I think it's mergeable (modulo cleanup and pylightning version ;-))

Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/requirements.txt Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

I updated the documentation a bit to make clear how it is currently supposed to work.

@darosior

darosior commented Oct 25, 2019

Copy link
Copy Markdown
Member

Ok so I have a channel with 60% theirs, 40% ours.

 ├────────┼─────────────┤ 245x2x0

I think the wording is misleading as if I want to drain, say 30 percent of the channel (so that the balance results in 90% theirs, 10% ours)

 ├──┼──────────────────────┤ 245x2x0

I dont

cli drain <scid> 30

But

cli drain <scid> 90

So effectively passing to the drain command the expected percent on their side. That's why I proposed to change the wording to :

cli set_theirs <scid> 90

And, if we keep the drain command, to pass it the expected percent to drain from my side (30%).

The same goes for fill :
Now that they effectively have 90% of the channel capacity,

 ├──┼──────────────────────┤ 245x2x0

and I want my side to have 90% capacity (so passing from ours: 10%; theirs: 90% to ours: 90%; theirs: 10%)

 ├────────────────────┼─┤ 245x2x0

I would expect to drain from them 80% of the capacity (hence fill 80% on my side) but in order to do that with the current wording I have to :

cli fill <scid> 90

That's why I propose to rename it to

cli set_ours <scid> 90

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Oct 26, 2019
Comment threaddrain/drain.py Outdated
@cdecker

Copy link
Copy Markdown
Contributor

Sorry for the delay, I seem to have missed the non-WIP window 😉

I'm quite happy to merge the plugin even if it has a edge-case that may fail some times. fwiw I have a c-lightning PR pending that should allow us to start testing plugins, so pinning down the issue and reproducing it will become easier: ElementsProject/lightning#3218

Comment threaddrain/README.md
lightning-cli fill scid [percentage] [chunks] [maxfeepercent] [retry_for] [exemptfee]
```

Another useful command is the `setbalance` that will fill up or drain your side

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.

🎉 ! 😁

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Nov 8, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

Hi,

After my first two days of my new 'Altersteilzeit' I managed to get this ready.

@darosior I added the setbalance command and rewrote the drainfill to behave more intuitive. thanks for the feedback. The new command works like a charm.
@cdecker I finally removed the WIP tag. Can we make final reviews and merge?

cheers,
Michael

@m-schmoock

m-schmoock commented Nov 8, 2019

Copy link
Copy Markdown
MemberAuthor

You guys also might want to test this, but for my setup and testnet and mainnet it works smoothly.

@darosior

Copy link
Copy Markdown
Member

testnet and mainnet it works smoothly.

So you don't have the spontaneous errors you were talking about ?

@m-schmoock

m-schmoock commented Nov 9, 2019

Copy link
Copy Markdown
MemberAuthor

Still have them from time to time, which is why I think it's not plug-in but daemon related.
It would also be good to know if I am the only one experiencing them...

@darosiordarosior 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.

ACK 2f825de

Tested this on my node, and it behaves exactly as I would expect it to behave. Playing with the chunk feature allows to rebalance channels it was not possible to rebalance previously: this is a really cool plugin ! 🎉

@cdecker
cdecker merged commit 0881322 into lightningd:masterNov 11, 2019
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@m-schmoock@darosior@cdecker@gallizoltan
, '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

drain and fill channel plugin - #22

Merged
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill
Nov 11, 2019
Merged

drain and fill channel plugin#22
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill

Conversation

@m-schmoock

@m-schmoockm-schmoock commented May 9, 2019

Copy link
Copy Markdown
Member

This plugin offers three new commands: drain, fill and setbalance.
It works similar to the rebalance plugin but with some key differences:

  • Does not need a second scid parameter but figures out the other one by routing.
  • Can have chunked payments that increases routing probability but can result in partial completion. If cunks is not set, number of required chunks is autodetected.
  • Does not consume or calculate msat amounts, but uses percentages. Default 100 for drain and fill and 50 for setbalance.

Note: If draining 100%, the plugin guesses the correct HTLC fee by try and error. For new servers that report HTLC fee via exception (ElementsProject/lightning#2691) it takes the exact amount.

Issues:

  • Can run into "route not found" errors afters several "drain"s on multiple channels. Reason yet unknown.

@m-schmoockm-schmoock added enhancement New feature or request work in progress This pull request cannot be merged yet labels May 9, 2019
@m-schmoockm-schmoock changed the title doc: drain plugin README.md and usagedrain and fill channel pluginMay 9, 2019
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from 4e5a008 to de0383dCompareMay 14, 2019 15:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from f0e0a88 to 0b533dbCompareMay 23, 2019 09:58
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 2 times, most recently from 5475d81 to eeaaba1CompareJune 6, 2019 22:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 3 times, most recently from ac762c3 to f235c65CompareJune 13, 2019 14:25
@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Jul 1, 2019
@m-schmoock

m-schmoock commented Jul 1, 2019

Copy link
Copy Markdown
MemberAuthor

I removed the "work in progress" TAG, as the plugin is very usable aready and I dont have good clues about the remaining TODOs and optimizations.

I could need a review now... volunteers?

Note: If you get "Could not find a route" errors, when draining a channel, try using lightning-cli drain <scid> 100 4 it tells the pluging to drain by 100% using 4 chunks. Im not sure, but it feels we have routing issues since the dijkstra update. Maybe reviewer finds another reason... The "fill" command doesn't have routing issues... Everytime I go through the generated 'exclude' list for the failed drain routing, it seems correctly build...

@darosiordarosior 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.

Here is what caught my eyes (it's mostly stylish) :

  • A docstring by function would be useful
  • Type hints : you use them for some function, and not for some other, or even for some arguments of a function and not some other.
  • Some nits (see below)

I also got an error when trying drain :

Error while processing drain: TypeError('__int__ returned non-int (type float)')

Comment threaddrain/README.md Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

This comment has been minimized.

@darosior

This comment has been minimized.

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Jul 9, 2019
@darosior

Copy link
Copy Markdown
Member

Btw if you think it's mergeable you should remove the WIP tag

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Oct 23, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

@darosior

I removed the WIP flag, still Im going to fix this one way or another, now that we talked about this issues it is at least known. If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

F.y.i. I will have more time on from November, since I reduced my regular job to just 25hrs a week :). This was going to be my first task anyway.

Great ! To work on Lightning ?

Yes !

@darosior

Copy link
Copy Markdown
Member

If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

I don't have one so we'll have to wait for ackbot ;-)

@darosiordarosior 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.

Mostly nits and questions, which most of them will need user testing to be resolved. I think it's mergeable (modulo cleanup and pylightning version ;-))

Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/requirements.txt Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

I updated the documentation a bit to make clear how it is currently supposed to work.

@darosior

darosior commented Oct 25, 2019

Copy link
Copy Markdown
Member

Ok so I have a channel with 60% theirs, 40% ours.

 ├────────┼─────────────┤ 245x2x0

I think the wording is misleading as if I want to drain, say 30 percent of the channel (so that the balance results in 90% theirs, 10% ours)

 ├──┼──────────────────────┤ 245x2x0

I dont

cli drain <scid> 30

But

cli drain <scid> 90

So effectively passing to the drain command the expected percent on their side. That's why I proposed to change the wording to :

cli set_theirs <scid> 90

And, if we keep the drain command, to pass it the expected percent to drain from my side (30%).

The same goes for fill :
Now that they effectively have 90% of the channel capacity,

 ├──┼──────────────────────┤ 245x2x0

and I want my side to have 90% capacity (so passing from ours: 10%; theirs: 90% to ours: 90%; theirs: 10%)

 ├────────────────────┼─┤ 245x2x0

I would expect to drain from them 80% of the capacity (hence fill 80% on my side) but in order to do that with the current wording I have to :

cli fill <scid> 90

That's why I propose to rename it to

cli set_ours <scid> 90

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Oct 26, 2019
Comment threaddrain/drain.py Outdated
@cdecker

Copy link
Copy Markdown
Contributor

Sorry for the delay, I seem to have missed the non-WIP window 😉

I'm quite happy to merge the plugin even if it has a edge-case that may fail some times. fwiw I have a c-lightning PR pending that should allow us to start testing plugins, so pinning down the issue and reproducing it will become easier: ElementsProject/lightning#3218

Comment threaddrain/README.md
lightning-cli fill scid [percentage] [chunks] [maxfeepercent] [retry_for] [exemptfee]
```

Another useful command is the `setbalance` that will fill up or drain your side

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.

🎉 ! 😁

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Nov 8, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

Hi,

After my first two days of my new 'Altersteilzeit' I managed to get this ready.

@darosior I added the setbalance command and rewrote the drainfill to behave more intuitive. thanks for the feedback. The new command works like a charm.
@cdecker I finally removed the WIP tag. Can we make final reviews and merge?

cheers,
Michael

@m-schmoock

m-schmoock commented Nov 8, 2019

Copy link
Copy Markdown
MemberAuthor

You guys also might want to test this, but for my setup and testnet and mainnet it works smoothly.

@darosior

Copy link
Copy Markdown
Member

testnet and mainnet it works smoothly.

So you don't have the spontaneous errors you were talking about ?

@m-schmoock

m-schmoock commented Nov 9, 2019

Copy link
Copy Markdown
MemberAuthor

Still have them from time to time, which is why I think it's not plug-in but daemon related.
It would also be good to know if I am the only one experiencing them...

@darosiordarosior 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.

ACK 2f825de

Tested this on my node, and it behaves exactly as I would expect it to behave. Playing with the chunk feature allows to rebalance channels it was not possible to rebalance previously: this is a really cool plugin ! 🎉

@cdecker
cdecker merged commit 0881322 into lightningd:masterNov 11, 2019
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@m-schmoock@darosior@cdecker@gallizoltan
, '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

drain and fill channel plugin - #22

Merged
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill
Nov 11, 2019
Merged

drain and fill channel plugin#22
cdecker merged 4 commits into
lightningd:masterfrom
m-schmoock:plugin_drain_fill

Conversation

@m-schmoock

@m-schmoockm-schmoock commented May 9, 2019

Copy link
Copy Markdown
Member

This plugin offers three new commands: drain, fill and setbalance.
It works similar to the rebalance plugin but with some key differences:

  • Does not need a second scid parameter but figures out the other one by routing.
  • Can have chunked payments that increases routing probability but can result in partial completion. If cunks is not set, number of required chunks is autodetected.
  • Does not consume or calculate msat amounts, but uses percentages. Default 100 for drain and fill and 50 for setbalance.

Note: If draining 100%, the plugin guesses the correct HTLC fee by try and error. For new servers that report HTLC fee via exception (ElementsProject/lightning#2691) it takes the exact amount.

Issues:

  • Can run into "route not found" errors afters several "drain"s on multiple channels. Reason yet unknown.

@m-schmoockm-schmoock added enhancement New feature or request work in progress This pull request cannot be merged yet labels May 9, 2019
@m-schmoockm-schmoock changed the title doc: drain plugin README.md and usagedrain and fill channel pluginMay 9, 2019
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from 4e5a008 to de0383dCompareMay 14, 2019 15:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 5 times, most recently from f0e0a88 to 0b533dbCompareMay 23, 2019 09:58
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 2 times, most recently from 5475d81 to eeaaba1CompareJune 6, 2019 22:49
@m-schmoock
m-schmoockforce-pushed the plugin_drain_fill branch 3 times, most recently from ac762c3 to f235c65CompareJune 13, 2019 14:25
@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Jul 1, 2019
@m-schmoock

m-schmoock commented Jul 1, 2019

Copy link
Copy Markdown
MemberAuthor

I removed the "work in progress" TAG, as the plugin is very usable aready and I dont have good clues about the remaining TODOs and optimizations.

I could need a review now... volunteers?

Note: If you get "Could not find a route" errors, when draining a channel, try using lightning-cli drain <scid> 100 4 it tells the pluging to drain by 100% using 4 chunks. Im not sure, but it feels we have routing issues since the dijkstra update. Maybe reviewer finds another reason... The "fill" command doesn't have routing issues... Everytime I go through the generated 'exclude' list for the failed drain routing, it seems correctly build...

@darosiordarosior 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.

Here is what caught my eyes (it's mostly stylish) :

  • A docstring by function would be useful
  • Type hints : you use them for some function, and not for some other, or even for some arguments of a function and not some other.
  • Some nits (see below)

I also got an error when trying drain :

Error while processing drain: TypeError('__int__ returned non-int (type float)')

Comment threaddrain/README.md Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

This comment has been minimized.

@darosior

This comment has been minimized.

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Jul 9, 2019
@darosior

Copy link
Copy Markdown
Member

Btw if you think it's mergeable you should remove the WIP tag

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Oct 23, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

@darosior

I removed the WIP flag, still Im going to fix this one way or another, now that we talked about this issues it is at least known. If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

F.y.i. I will have more time on from November, since I reduced my regular job to just 25hrs a week :). This was going to be my first task anyway.

Great ! To work on Lightning ?

Yes !

@darosior

Copy link
Copy Markdown
Member

If you are fine we can merge, I lost my commit access because I have been inactive for a while, so we need someone else to merge it.

I don't have one so we'll have to wait for ackbot ;-)

@darosiordarosior 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.

Mostly nits and questions, which most of them will need user testing to be resolved. I think it's mergeable (modulo cleanup and pylightning version ;-))

Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py
Comment threaddrain/requirements.txt Outdated
Comment threaddrain/drain.py Outdated
Comment threaddrain/drain.py Outdated
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

I updated the documentation a bit to make clear how it is currently supposed to work.

@darosior

darosior commented Oct 25, 2019

Copy link
Copy Markdown
Member

Ok so I have a channel with 60% theirs, 40% ours.

 ├────────┼─────────────┤ 245x2x0

I think the wording is misleading as if I want to drain, say 30 percent of the channel (so that the balance results in 90% theirs, 10% ours)

 ├──┼──────────────────────┤ 245x2x0

I dont

cli drain <scid> 30

But

cli drain <scid> 90

So effectively passing to the drain command the expected percent on their side. That's why I proposed to change the wording to :

cli set_theirs <scid> 90

And, if we keep the drain command, to pass it the expected percent to drain from my side (30%).

The same goes for fill :
Now that they effectively have 90% of the channel capacity,

 ├──┼──────────────────────┤ 245x2x0

and I want my side to have 90% capacity (so passing from ours: 10%; theirs: 90% to ours: 90%; theirs: 10%)

 ├────────────────────┼─┤ 245x2x0

I would expect to drain from them 80% of the capacity (hence fill 80% on my side) but in order to do that with the current wording I have to :

cli fill <scid> 90

That's why I propose to rename it to

cli set_ours <scid> 90

@m-schmoockm-schmoock added the work in progress This pull request cannot be merged yet label Oct 26, 2019
Comment threaddrain/drain.py Outdated
@cdecker

Copy link
Copy Markdown
Contributor

Sorry for the delay, I seem to have missed the non-WIP window 😉

I'm quite happy to merge the plugin even if it has a edge-case that may fail some times. fwiw I have a c-lightning PR pending that should allow us to start testing plugins, so pinning down the issue and reproducing it will become easier: ElementsProject/lightning#3218

Comment threaddrain/README.md
lightning-cli fill scid [percentage] [chunks] [maxfeepercent] [retry_for] [exemptfee]
```

Another useful command is the `setbalance` that will fill up or drain your side

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.

🎉 ! 😁

@m-schmoockm-schmoock removed the work in progress This pull request cannot be merged yet label Nov 8, 2019
@m-schmoock

Copy link
Copy Markdown
MemberAuthor

Hi,

After my first two days of my new 'Altersteilzeit' I managed to get this ready.

@darosior I added the setbalance command and rewrote the drainfill to behave more intuitive. thanks for the feedback. The new command works like a charm.
@cdecker I finally removed the WIP tag. Can we make final reviews and merge?

cheers,
Michael

@m-schmoock

m-schmoock commented Nov 8, 2019

Copy link
Copy Markdown
MemberAuthor

You guys also might want to test this, but for my setup and testnet and mainnet it works smoothly.

@darosior

Copy link
Copy Markdown
Member

testnet and mainnet it works smoothly.

So you don't have the spontaneous errors you were talking about ?

@m-schmoock

m-schmoock commented Nov 9, 2019

Copy link
Copy Markdown
MemberAuthor

Still have them from time to time, which is why I think it's not plug-in but daemon related.
It would also be good to know if I am the only one experiencing them...

@darosiordarosior 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.

ACK 2f825de

Tested this on my node, and it behaves exactly as I would expect it to behave. Playing with the chunk feature allows to rebalance channels it was not possible to rebalance previously: this is a really cool plugin ! 🎉

@cdecker
cdecker merged commit 0881322 into lightningd:masterNov 11, 2019
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@m-schmoock@darosior@cdecker@gallizoltan