Add code example for each supported backend - #526

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples
Nov 22, 2022
Merged

Add code example for each supported backend#526
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples

Conversation

@w0xlt

@w0xltw0xlt commented Jan 12, 2022

Copy link
Copy Markdown
Contributor

This PR adds code example for connecting to Esplora, Electrum Server, Neutrino and Bitcoin Core.
Also shows how to retrieve balance, sign and broadcast transactions.

To test:

cd examples/backend/
cargo run electrum
cargo run esplora
cargo run neutrino
cargo run rpc_core

@w0xltw0xlt changed the title Add code example for every supported backendAdd code example for each supported backendJan 12, 2022

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

Concept ACK on adding more example to the project. But I think its possible without adding a new cargo project in the workspace.

Can't we just have running examples like this #519?

@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@w0xlt

w0xlt commented Jul 26, 2022

Copy link
Copy Markdown
ContributorAuthor

@notmandatory sorry for the delay.

I force pushed a new version that adds examples just for Electrum and Esplora, as there are already examples for Compact Filter and RPC backends.

I also updated the code to 0.20.1 and addressed @rajarshimaitra's suggestion not to add a new cargo project.

@w0xlt

Copy link
Copy Markdown
ContributorAuthor

The new push added the documentation suggested in #685, explaining how to use use-esplora-reqwest.

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

Concept ACK.. Few more fixes needs to be done..

Comment threadCargo.toml
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from 8f1ac3d to 400cbadCompareSeptember 1, 2022 19:51

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

Code looks good.. It need few more fixes to work.. Sorry if I reviewed prematurely.

Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from a9c426e to 95e9b7fCompareSeptember 4, 2022 04:40

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

tACK 95e9b7f

Code loos good.. Thanks for the quick update.. One last comment..

Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated

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

ACK f13d5e6

One last fix to pass the tests..

Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 5 times, most recently from 07f6747 to c7e1247CompareSeptember 5, 2022 14:04

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

tACK c7e1247

LGTM.. One suggestion maybe for a future PR.

Comment threadexamples/esplora_backend.rs Outdated
/// This can be run with `cargo run --features="use-esplora-reqwest, reqwest-default-tls" --example esplora_backend`
/// in the root folder.
///
/// Note: The configuration above uses asynchronous HTTP calls.

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.

Sorry I have missed this before. Nothing major, feel free to ignore for this PR.

Even though the calls are async in reqwest they are still blocking in our impl, using the await_or_block macro like this,

Ok(await_or_block!(self.url_client._get_tx(txid))?)

So to actually make the wallet calls async in the example you need to use the async-interface feature too.. In that case you will have await in your wallets calls in the example..

This PR is good to go on its own.. Maybe as a future PR an idea.

  • Transform this to a blocking example using ureq.
  • Create another fully async example using reqwest.

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.

That would be great. But, as mentioned above, the command cargo run --features="use-esplora-reqwest, reqwest-default-tls, async-interface" --example esplora_backend results in error.

I think the problem is here (src/lib:210)

#[cfg(all(feature = "async-interface", feature = "electrum"))]compile_error!("Features async-interface and electrum are mutually exclusive and cannot be enabled together");

Even there is no electrum in the features, it seems this is enabled by default. Is there a way to disable it ?

@notmandatorynotmandatorySep 6, 2022

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.

You can disable the default features (which are "key-value-db", "electrum") by adding --no-default-features, eg:

cargo run --no-default-features --features=use-esplora-reqwest,reqwest-default-tls,async-interface --example esplora_backend

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.

@notmandatory this worked. Thanks.

@rajarshimaitra I created two files examples/esplora_backend_synchronous.rs and examples/esplora_backend_asynchronous.rs in a2b6a40.

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 don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

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

ACK a2b6a40

Thanks for the split.. This now looks complete.. Few more nits..

Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_synchronous.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

I don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

It was some temporary problem with rust update server.. I restarted the tests and it passed..

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

tACK e50fcb6

@w0xlt

w0xlt commented Nov 1, 2022

Copy link
Copy Markdown
ContributorAuthor

Rebased.
Is any additional action required ?

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

Sorry took me some time to get back to this.. Thanks for pushing this through..

tACK f99a6b9

All looks good to me, and great work separating the blocking and async example separate. This is good to go, no more changes should be required..

@notmandatory
notmandatory merged commit 1c95ca3 into bitcoindevkit:masterNov 22, 2022

@22f-cy22f-cy left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

if [ "$PWD" = "$HOME" ]; then

@w0xlt
w0xlt deleted the add_examples branch November 30, 2022 04:44
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@w0xlt@notmandatory@rajarshimaitra@22f-cy
, '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

Add code example for each supported backend - #526

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples
Nov 22, 2022
Merged

Add code example for each supported backend#526
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples

Conversation

@w0xlt

@w0xltw0xlt commented Jan 12, 2022

Copy link
Copy Markdown
Contributor

This PR adds code example for connecting to Esplora, Electrum Server, Neutrino and Bitcoin Core.
Also shows how to retrieve balance, sign and broadcast transactions.

To test:

cd examples/backend/
cargo run electrum
cargo run esplora
cargo run neutrino
cargo run rpc_core

@w0xltw0xlt changed the title Add code example for every supported backendAdd code example for each supported backendJan 12, 2022

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

Concept ACK on adding more example to the project. But I think its possible without adding a new cargo project in the workspace.

Can't we just have running examples like this #519?

@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@w0xlt

w0xlt commented Jul 26, 2022

Copy link
Copy Markdown
ContributorAuthor

@notmandatory sorry for the delay.

I force pushed a new version that adds examples just for Electrum and Esplora, as there are already examples for Compact Filter and RPC backends.

I also updated the code to 0.20.1 and addressed @rajarshimaitra's suggestion not to add a new cargo project.

@w0xlt

Copy link
Copy Markdown
ContributorAuthor

The new push added the documentation suggested in #685, explaining how to use use-esplora-reqwest.

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

Concept ACK.. Few more fixes needs to be done..

Comment threadCargo.toml
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from 8f1ac3d to 400cbadCompareSeptember 1, 2022 19:51

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

Code looks good.. It need few more fixes to work.. Sorry if I reviewed prematurely.

Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from a9c426e to 95e9b7fCompareSeptember 4, 2022 04:40

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

tACK 95e9b7f

Code loos good.. Thanks for the quick update.. One last comment..

Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated

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

ACK f13d5e6

One last fix to pass the tests..

Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 5 times, most recently from 07f6747 to c7e1247CompareSeptember 5, 2022 14:04

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

tACK c7e1247

LGTM.. One suggestion maybe for a future PR.

Comment threadexamples/esplora_backend.rs Outdated
/// This can be run with `cargo run --features="use-esplora-reqwest, reqwest-default-tls" --example esplora_backend`
/// in the root folder.
///
/// Note: The configuration above uses asynchronous HTTP calls.

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.

Sorry I have missed this before. Nothing major, feel free to ignore for this PR.

Even though the calls are async in reqwest they are still blocking in our impl, using the await_or_block macro like this,

Ok(await_or_block!(self.url_client._get_tx(txid))?)

So to actually make the wallet calls async in the example you need to use the async-interface feature too.. In that case you will have await in your wallets calls in the example..

This PR is good to go on its own.. Maybe as a future PR an idea.

  • Transform this to a blocking example using ureq.
  • Create another fully async example using reqwest.

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.

That would be great. But, as mentioned above, the command cargo run --features="use-esplora-reqwest, reqwest-default-tls, async-interface" --example esplora_backend results in error.

I think the problem is here (src/lib:210)

#[cfg(all(feature = "async-interface", feature = "electrum"))]compile_error!("Features async-interface and electrum are mutually exclusive and cannot be enabled together");

Even there is no electrum in the features, it seems this is enabled by default. Is there a way to disable it ?

@notmandatorynotmandatorySep 6, 2022

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.

You can disable the default features (which are "key-value-db", "electrum") by adding --no-default-features, eg:

cargo run --no-default-features --features=use-esplora-reqwest,reqwest-default-tls,async-interface --example esplora_backend

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.

@notmandatory this worked. Thanks.

@rajarshimaitra I created two files examples/esplora_backend_synchronous.rs and examples/esplora_backend_asynchronous.rs in a2b6a40.

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 don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

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

ACK a2b6a40

Thanks for the split.. This now looks complete.. Few more nits..

Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_synchronous.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

I don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

It was some temporary problem with rust update server.. I restarted the tests and it passed..

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

tACK e50fcb6

@w0xlt

w0xlt commented Nov 1, 2022

Copy link
Copy Markdown
ContributorAuthor

Rebased.
Is any additional action required ?

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

Sorry took me some time to get back to this.. Thanks for pushing this through..

tACK f99a6b9

All looks good to me, and great work separating the blocking and async example separate. This is good to go, no more changes should be required..

@notmandatory
notmandatory merged commit 1c95ca3 into bitcoindevkit:masterNov 22, 2022

@22f-cy22f-cy left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

if [ "$PWD" = "$HOME" ]; then

@w0xlt
w0xlt deleted the add_examples branch November 30, 2022 04:44
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@w0xlt@notmandatory@rajarshimaitra@22f-cy
, '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

Add code example for each supported backend - #526

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples
Nov 22, 2022
Merged

Add code example for each supported backend#526
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples

Conversation

@w0xlt

@w0xltw0xlt commented Jan 12, 2022

Copy link
Copy Markdown
Contributor

This PR adds code example for connecting to Esplora, Electrum Server, Neutrino and Bitcoin Core.
Also shows how to retrieve balance, sign and broadcast transactions.

To test:

cd examples/backend/
cargo run electrum
cargo run esplora
cargo run neutrino
cargo run rpc_core

@w0xltw0xlt changed the title Add code example for every supported backendAdd code example for each supported backendJan 12, 2022

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

Concept ACK on adding more example to the project. But I think its possible without adding a new cargo project in the workspace.

Can't we just have running examples like this #519?

@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@w0xlt

w0xlt commented Jul 26, 2022

Copy link
Copy Markdown
ContributorAuthor

@notmandatory sorry for the delay.

I force pushed a new version that adds examples just for Electrum and Esplora, as there are already examples for Compact Filter and RPC backends.

I also updated the code to 0.20.1 and addressed @rajarshimaitra's suggestion not to add a new cargo project.

@w0xlt

Copy link
Copy Markdown
ContributorAuthor

The new push added the documentation suggested in #685, explaining how to use use-esplora-reqwest.

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

Concept ACK.. Few more fixes needs to be done..

Comment threadCargo.toml
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from 8f1ac3d to 400cbadCompareSeptember 1, 2022 19:51

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

Code looks good.. It need few more fixes to work.. Sorry if I reviewed prematurely.

Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from a9c426e to 95e9b7fCompareSeptember 4, 2022 04:40

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

tACK 95e9b7f

Code loos good.. Thanks for the quick update.. One last comment..

Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated

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

ACK f13d5e6

One last fix to pass the tests..

Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 5 times, most recently from 07f6747 to c7e1247CompareSeptember 5, 2022 14:04

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

tACK c7e1247

LGTM.. One suggestion maybe for a future PR.

Comment threadexamples/esplora_backend.rs Outdated
/// This can be run with `cargo run --features="use-esplora-reqwest, reqwest-default-tls" --example esplora_backend`
/// in the root folder.
///
/// Note: The configuration above uses asynchronous HTTP calls.

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.

Sorry I have missed this before. Nothing major, feel free to ignore for this PR.

Even though the calls are async in reqwest they are still blocking in our impl, using the await_or_block macro like this,

Ok(await_or_block!(self.url_client._get_tx(txid))?)

So to actually make the wallet calls async in the example you need to use the async-interface feature too.. In that case you will have await in your wallets calls in the example..

This PR is good to go on its own.. Maybe as a future PR an idea.

  • Transform this to a blocking example using ureq.
  • Create another fully async example using reqwest.

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.

That would be great. But, as mentioned above, the command cargo run --features="use-esplora-reqwest, reqwest-default-tls, async-interface" --example esplora_backend results in error.

I think the problem is here (src/lib:210)

#[cfg(all(feature = "async-interface", feature = "electrum"))]compile_error!("Features async-interface and electrum are mutually exclusive and cannot be enabled together");

Even there is no electrum in the features, it seems this is enabled by default. Is there a way to disable it ?

@notmandatorynotmandatorySep 6, 2022

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.

You can disable the default features (which are "key-value-db", "electrum") by adding --no-default-features, eg:

cargo run --no-default-features --features=use-esplora-reqwest,reqwest-default-tls,async-interface --example esplora_backend

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.

@notmandatory this worked. Thanks.

@rajarshimaitra I created two files examples/esplora_backend_synchronous.rs and examples/esplora_backend_asynchronous.rs in a2b6a40.

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 don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

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

ACK a2b6a40

Thanks for the split.. This now looks complete.. Few more nits..

Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_synchronous.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

I don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

It was some temporary problem with rust update server.. I restarted the tests and it passed..

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

tACK e50fcb6

@w0xlt

w0xlt commented Nov 1, 2022

Copy link
Copy Markdown
ContributorAuthor

Rebased.
Is any additional action required ?

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

Sorry took me some time to get back to this.. Thanks for pushing this through..

tACK f99a6b9

All looks good to me, and great work separating the blocking and async example separate. This is good to go, no more changes should be required..

@notmandatory
notmandatory merged commit 1c95ca3 into bitcoindevkit:masterNov 22, 2022

@22f-cy22f-cy left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

if [ "$PWD" = "$HOME" ]; then

@w0xlt
w0xlt deleted the add_examples branch November 30, 2022 04:44
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@w0xlt@notmandatory@rajarshimaitra@22f-cy
, '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

Add code example for each supported backend - #526

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples
Nov 22, 2022
Merged

Add code example for each supported backend#526
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples

Conversation

@w0xlt

@w0xltw0xlt commented Jan 12, 2022

Copy link
Copy Markdown
Contributor

This PR adds code example for connecting to Esplora, Electrum Server, Neutrino and Bitcoin Core.
Also shows how to retrieve balance, sign and broadcast transactions.

To test:

cd examples/backend/
cargo run electrum
cargo run esplora
cargo run neutrino
cargo run rpc_core

@w0xltw0xlt changed the title Add code example for every supported backendAdd code example for each supported backendJan 12, 2022

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

Concept ACK on adding more example to the project. But I think its possible without adding a new cargo project in the workspace.

Can't we just have running examples like this #519?

@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@w0xlt

w0xlt commented Jul 26, 2022

Copy link
Copy Markdown
ContributorAuthor

@notmandatory sorry for the delay.

I force pushed a new version that adds examples just for Electrum and Esplora, as there are already examples for Compact Filter and RPC backends.

I also updated the code to 0.20.1 and addressed @rajarshimaitra's suggestion not to add a new cargo project.

@w0xlt

Copy link
Copy Markdown
ContributorAuthor

The new push added the documentation suggested in #685, explaining how to use use-esplora-reqwest.

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

Concept ACK.. Few more fixes needs to be done..

Comment threadCargo.toml
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from 8f1ac3d to 400cbadCompareSeptember 1, 2022 19:51

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

Code looks good.. It need few more fixes to work.. Sorry if I reviewed prematurely.

Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from a9c426e to 95e9b7fCompareSeptember 4, 2022 04:40

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

tACK 95e9b7f

Code loos good.. Thanks for the quick update.. One last comment..

Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated

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

ACK f13d5e6

One last fix to pass the tests..

Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 5 times, most recently from 07f6747 to c7e1247CompareSeptember 5, 2022 14:04

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

tACK c7e1247

LGTM.. One suggestion maybe for a future PR.

Comment threadexamples/esplora_backend.rs Outdated
/// This can be run with `cargo run --features="use-esplora-reqwest, reqwest-default-tls" --example esplora_backend`
/// in the root folder.
///
/// Note: The configuration above uses asynchronous HTTP calls.

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.

Sorry I have missed this before. Nothing major, feel free to ignore for this PR.

Even though the calls are async in reqwest they are still blocking in our impl, using the await_or_block macro like this,

Ok(await_or_block!(self.url_client._get_tx(txid))?)

So to actually make the wallet calls async in the example you need to use the async-interface feature too.. In that case you will have await in your wallets calls in the example..

This PR is good to go on its own.. Maybe as a future PR an idea.

  • Transform this to a blocking example using ureq.
  • Create another fully async example using reqwest.

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.

That would be great. But, as mentioned above, the command cargo run --features="use-esplora-reqwest, reqwest-default-tls, async-interface" --example esplora_backend results in error.

I think the problem is here (src/lib:210)

#[cfg(all(feature = "async-interface", feature = "electrum"))]compile_error!("Features async-interface and electrum are mutually exclusive and cannot be enabled together");

Even there is no electrum in the features, it seems this is enabled by default. Is there a way to disable it ?

@notmandatorynotmandatorySep 6, 2022

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.

You can disable the default features (which are "key-value-db", "electrum") by adding --no-default-features, eg:

cargo run --no-default-features --features=use-esplora-reqwest,reqwest-default-tls,async-interface --example esplora_backend

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.

@notmandatory this worked. Thanks.

@rajarshimaitra I created two files examples/esplora_backend_synchronous.rs and examples/esplora_backend_asynchronous.rs in a2b6a40.

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 don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

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

ACK a2b6a40

Thanks for the split.. This now looks complete.. Few more nits..

Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_synchronous.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

I don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

It was some temporary problem with rust update server.. I restarted the tests and it passed..

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

tACK e50fcb6

@w0xlt

w0xlt commented Nov 1, 2022

Copy link
Copy Markdown
ContributorAuthor

Rebased.
Is any additional action required ?

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

Sorry took me some time to get back to this.. Thanks for pushing this through..

tACK f99a6b9

All looks good to me, and great work separating the blocking and async example separate. This is good to go, no more changes should be required..

@notmandatory
notmandatory merged commit 1c95ca3 into bitcoindevkit:masterNov 22, 2022

@22f-cy22f-cy left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

if [ "$PWD" = "$HOME" ]; then

@w0xlt
w0xlt deleted the add_examples branch November 30, 2022 04:44
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@w0xlt@notmandatory@rajarshimaitra@22f-cy
, '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

Add code example for each supported backend - #526

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples
Nov 22, 2022
Merged

Add code example for each supported backend#526
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples

Conversation

@w0xlt

@w0xltw0xlt commented Jan 12, 2022

Copy link
Copy Markdown
Contributor

This PR adds code example for connecting to Esplora, Electrum Server, Neutrino and Bitcoin Core.
Also shows how to retrieve balance, sign and broadcast transactions.

To test:

cd examples/backend/
cargo run electrum
cargo run esplora
cargo run neutrino
cargo run rpc_core

@w0xltw0xlt changed the title Add code example for every supported backendAdd code example for each supported backendJan 12, 2022

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

Concept ACK on adding more example to the project. But I think its possible without adding a new cargo project in the workspace.

Can't we just have running examples like this #519?

@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@w0xlt

w0xlt commented Jul 26, 2022

Copy link
Copy Markdown
ContributorAuthor

@notmandatory sorry for the delay.

I force pushed a new version that adds examples just for Electrum and Esplora, as there are already examples for Compact Filter and RPC backends.

I also updated the code to 0.20.1 and addressed @rajarshimaitra's suggestion not to add a new cargo project.

@w0xlt

Copy link
Copy Markdown
ContributorAuthor

The new push added the documentation suggested in #685, explaining how to use use-esplora-reqwest.

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

Concept ACK.. Few more fixes needs to be done..

Comment threadCargo.toml
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from 8f1ac3d to 400cbadCompareSeptember 1, 2022 19:51

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

Code looks good.. It need few more fixes to work.. Sorry if I reviewed prematurely.

Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from a9c426e to 95e9b7fCompareSeptember 4, 2022 04:40

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

tACK 95e9b7f

Code loos good.. Thanks for the quick update.. One last comment..

Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated

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

ACK f13d5e6

One last fix to pass the tests..

Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 5 times, most recently from 07f6747 to c7e1247CompareSeptember 5, 2022 14:04

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

tACK c7e1247

LGTM.. One suggestion maybe for a future PR.

Comment threadexamples/esplora_backend.rs Outdated
/// This can be run with `cargo run --features="use-esplora-reqwest, reqwest-default-tls" --example esplora_backend`
/// in the root folder.
///
/// Note: The configuration above uses asynchronous HTTP calls.

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.

Sorry I have missed this before. Nothing major, feel free to ignore for this PR.

Even though the calls are async in reqwest they are still blocking in our impl, using the await_or_block macro like this,

Ok(await_or_block!(self.url_client._get_tx(txid))?)

So to actually make the wallet calls async in the example you need to use the async-interface feature too.. In that case you will have await in your wallets calls in the example..

This PR is good to go on its own.. Maybe as a future PR an idea.

  • Transform this to a blocking example using ureq.
  • Create another fully async example using reqwest.

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.

That would be great. But, as mentioned above, the command cargo run --features="use-esplora-reqwest, reqwest-default-tls, async-interface" --example esplora_backend results in error.

I think the problem is here (src/lib:210)

#[cfg(all(feature = "async-interface", feature = "electrum"))]compile_error!("Features async-interface and electrum are mutually exclusive and cannot be enabled together");

Even there is no electrum in the features, it seems this is enabled by default. Is there a way to disable it ?

@notmandatorynotmandatorySep 6, 2022

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.

You can disable the default features (which are "key-value-db", "electrum") by adding --no-default-features, eg:

cargo run --no-default-features --features=use-esplora-reqwest,reqwest-default-tls,async-interface --example esplora_backend

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.

@notmandatory this worked. Thanks.

@rajarshimaitra I created two files examples/esplora_backend_synchronous.rs and examples/esplora_backend_asynchronous.rs in a2b6a40.

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 don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

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

ACK a2b6a40

Thanks for the split.. This now looks complete.. Few more nits..

Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_synchronous.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

I don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

It was some temporary problem with rust update server.. I restarted the tests and it passed..

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

tACK e50fcb6

@w0xlt

w0xlt commented Nov 1, 2022

Copy link
Copy Markdown
ContributorAuthor

Rebased.
Is any additional action required ?

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

Sorry took me some time to get back to this.. Thanks for pushing this through..

tACK f99a6b9

All looks good to me, and great work separating the blocking and async example separate. This is good to go, no more changes should be required..

@notmandatory
notmandatory merged commit 1c95ca3 into bitcoindevkit:masterNov 22, 2022

@22f-cy22f-cy left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

if [ "$PWD" = "$HOME" ]; then

@w0xlt
w0xlt deleted the add_examples branch November 30, 2022 04:44
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@w0xlt@notmandatory@rajarshimaitra@22f-cy
, '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

Add code example for each supported backend - #526

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples
Nov 22, 2022
Merged

Add code example for each supported backend#526
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples

Conversation

@w0xlt

@w0xltw0xlt commented Jan 12, 2022

Copy link
Copy Markdown
Contributor

This PR adds code example for connecting to Esplora, Electrum Server, Neutrino and Bitcoin Core.
Also shows how to retrieve balance, sign and broadcast transactions.

To test:

cd examples/backend/
cargo run electrum
cargo run esplora
cargo run neutrino
cargo run rpc_core

@w0xltw0xlt changed the title Add code example for every supported backendAdd code example for each supported backendJan 12, 2022

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

Concept ACK on adding more example to the project. But I think its possible without adding a new cargo project in the workspace.

Can't we just have running examples like this #519?

@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@w0xlt

w0xlt commented Jul 26, 2022

Copy link
Copy Markdown
ContributorAuthor

@notmandatory sorry for the delay.

I force pushed a new version that adds examples just for Electrum and Esplora, as there are already examples for Compact Filter and RPC backends.

I also updated the code to 0.20.1 and addressed @rajarshimaitra's suggestion not to add a new cargo project.

@w0xlt

Copy link
Copy Markdown
ContributorAuthor

The new push added the documentation suggested in #685, explaining how to use use-esplora-reqwest.

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

Concept ACK.. Few more fixes needs to be done..

Comment threadCargo.toml
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from 8f1ac3d to 400cbadCompareSeptember 1, 2022 19:51

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

Code looks good.. It need few more fixes to work.. Sorry if I reviewed prematurely.

Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from a9c426e to 95e9b7fCompareSeptember 4, 2022 04:40

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

tACK 95e9b7f

Code loos good.. Thanks for the quick update.. One last comment..

Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated

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

ACK f13d5e6

One last fix to pass the tests..

Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 5 times, most recently from 07f6747 to c7e1247CompareSeptember 5, 2022 14:04

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

tACK c7e1247

LGTM.. One suggestion maybe for a future PR.

Comment threadexamples/esplora_backend.rs Outdated
/// This can be run with `cargo run --features="use-esplora-reqwest, reqwest-default-tls" --example esplora_backend`
/// in the root folder.
///
/// Note: The configuration above uses asynchronous HTTP calls.

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.

Sorry I have missed this before. Nothing major, feel free to ignore for this PR.

Even though the calls are async in reqwest they are still blocking in our impl, using the await_or_block macro like this,

Ok(await_or_block!(self.url_client._get_tx(txid))?)

So to actually make the wallet calls async in the example you need to use the async-interface feature too.. In that case you will have await in your wallets calls in the example..

This PR is good to go on its own.. Maybe as a future PR an idea.

  • Transform this to a blocking example using ureq.
  • Create another fully async example using reqwest.

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.

That would be great. But, as mentioned above, the command cargo run --features="use-esplora-reqwest, reqwest-default-tls, async-interface" --example esplora_backend results in error.

I think the problem is here (src/lib:210)

#[cfg(all(feature = "async-interface", feature = "electrum"))]compile_error!("Features async-interface and electrum are mutually exclusive and cannot be enabled together");

Even there is no electrum in the features, it seems this is enabled by default. Is there a way to disable it ?

@notmandatorynotmandatorySep 6, 2022

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.

You can disable the default features (which are "key-value-db", "electrum") by adding --no-default-features, eg:

cargo run --no-default-features --features=use-esplora-reqwest,reqwest-default-tls,async-interface --example esplora_backend

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.

@notmandatory this worked. Thanks.

@rajarshimaitra I created two files examples/esplora_backend_synchronous.rs and examples/esplora_backend_asynchronous.rs in a2b6a40.

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 don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

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

ACK a2b6a40

Thanks for the split.. This now looks complete.. Few more nits..

Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_synchronous.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

I don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

It was some temporary problem with rust update server.. I restarted the tests and it passed..

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

tACK e50fcb6

@w0xlt

w0xlt commented Nov 1, 2022

Copy link
Copy Markdown
ContributorAuthor

Rebased.
Is any additional action required ?

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

Sorry took me some time to get back to this.. Thanks for pushing this through..

tACK f99a6b9

All looks good to me, and great work separating the blocking and async example separate. This is good to go, no more changes should be required..

@notmandatory
notmandatory merged commit 1c95ca3 into bitcoindevkit:masterNov 22, 2022

@22f-cy22f-cy left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

if [ "$PWD" = "$HOME" ]; then

@w0xlt
w0xlt deleted the add_examples branch November 30, 2022 04:44
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@w0xlt@notmandatory@rajarshimaitra@22f-cy
, '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

Add code example for each supported backend - #526

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples
Nov 22, 2022
Merged

Add code example for each supported backend#526
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples

Conversation

@w0xlt

@w0xltw0xlt commented Jan 12, 2022

Copy link
Copy Markdown
Contributor

This PR adds code example for connecting to Esplora, Electrum Server, Neutrino and Bitcoin Core.
Also shows how to retrieve balance, sign and broadcast transactions.

To test:

cd examples/backend/
cargo run electrum
cargo run esplora
cargo run neutrino
cargo run rpc_core

@w0xltw0xlt changed the title Add code example for every supported backendAdd code example for each supported backendJan 12, 2022

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

Concept ACK on adding more example to the project. But I think its possible without adding a new cargo project in the workspace.

Can't we just have running examples like this #519?

@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@w0xlt

w0xlt commented Jul 26, 2022

Copy link
Copy Markdown
ContributorAuthor

@notmandatory sorry for the delay.

I force pushed a new version that adds examples just for Electrum and Esplora, as there are already examples for Compact Filter and RPC backends.

I also updated the code to 0.20.1 and addressed @rajarshimaitra's suggestion not to add a new cargo project.

@w0xlt

Copy link
Copy Markdown
ContributorAuthor

The new push added the documentation suggested in #685, explaining how to use use-esplora-reqwest.

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

Concept ACK.. Few more fixes needs to be done..

Comment threadCargo.toml
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from 8f1ac3d to 400cbadCompareSeptember 1, 2022 19:51

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

Code looks good.. It need few more fixes to work.. Sorry if I reviewed prematurely.

Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from a9c426e to 95e9b7fCompareSeptember 4, 2022 04:40

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

tACK 95e9b7f

Code loos good.. Thanks for the quick update.. One last comment..

Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated

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

ACK f13d5e6

One last fix to pass the tests..

Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 5 times, most recently from 07f6747 to c7e1247CompareSeptember 5, 2022 14:04

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

tACK c7e1247

LGTM.. One suggestion maybe for a future PR.

Comment threadexamples/esplora_backend.rs Outdated
/// This can be run with `cargo run --features="use-esplora-reqwest, reqwest-default-tls" --example esplora_backend`
/// in the root folder.
///
/// Note: The configuration above uses asynchronous HTTP calls.

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.

Sorry I have missed this before. Nothing major, feel free to ignore for this PR.

Even though the calls are async in reqwest they are still blocking in our impl, using the await_or_block macro like this,

Ok(await_or_block!(self.url_client._get_tx(txid))?)

So to actually make the wallet calls async in the example you need to use the async-interface feature too.. In that case you will have await in your wallets calls in the example..

This PR is good to go on its own.. Maybe as a future PR an idea.

  • Transform this to a blocking example using ureq.
  • Create another fully async example using reqwest.

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.

That would be great. But, as mentioned above, the command cargo run --features="use-esplora-reqwest, reqwest-default-tls, async-interface" --example esplora_backend results in error.

I think the problem is here (src/lib:210)

#[cfg(all(feature = "async-interface", feature = "electrum"))]compile_error!("Features async-interface and electrum are mutually exclusive and cannot be enabled together");

Even there is no electrum in the features, it seems this is enabled by default. Is there a way to disable it ?

@notmandatorynotmandatorySep 6, 2022

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.

You can disable the default features (which are "key-value-db", "electrum") by adding --no-default-features, eg:

cargo run --no-default-features --features=use-esplora-reqwest,reqwest-default-tls,async-interface --example esplora_backend

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.

@notmandatory this worked. Thanks.

@rajarshimaitra I created two files examples/esplora_backend_synchronous.rs and examples/esplora_backend_asynchronous.rs in a2b6a40.

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 don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

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

ACK a2b6a40

Thanks for the split.. This now looks complete.. Few more nits..

Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_synchronous.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

I don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

It was some temporary problem with rust update server.. I restarted the tests and it passed..

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

tACK e50fcb6

@w0xlt

w0xlt commented Nov 1, 2022

Copy link
Copy Markdown
ContributorAuthor

Rebased.
Is any additional action required ?

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

Sorry took me some time to get back to this.. Thanks for pushing this through..

tACK f99a6b9

All looks good to me, and great work separating the blocking and async example separate. This is good to go, no more changes should be required..

@notmandatory
notmandatory merged commit 1c95ca3 into bitcoindevkit:masterNov 22, 2022

@22f-cy22f-cy left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

if [ "$PWD" = "$HOME" ]; then

@w0xlt
w0xlt deleted the add_examples branch November 30, 2022 04:44
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@w0xlt@notmandatory@rajarshimaitra@22f-cy
, '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

Add code example for each supported backend - #526

Merged
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples
Nov 22, 2022
Merged

Add code example for each supported backend#526
notmandatory merged 2 commits into
bitcoindevkit:masterfrom
w0xlt:add_examples

Conversation

@w0xlt

@w0xltw0xlt commented Jan 12, 2022

Copy link
Copy Markdown
Contributor

This PR adds code example for connecting to Esplora, Electrum Server, Neutrino and Bitcoin Core.
Also shows how to retrieve balance, sign and broadcast transactions.

To test:

cd examples/backend/
cargo run electrum
cargo run esplora
cargo run neutrino
cargo run rpc_core

@w0xltw0xlt changed the title Add code example for every supported backendAdd code example for each supported backendJan 12, 2022

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

Concept ACK on adding more example to the project. But I think its possible without adding a new cargo project in the workspace.

Can't we just have running examples like this #519?

@notmandatory

Copy link
Copy Markdown
Member

Hi, please rebase to pickup changes in #596. Thanks!

@w0xlt

w0xlt commented Jul 26, 2022

Copy link
Copy Markdown
ContributorAuthor

@notmandatory sorry for the delay.

I force pushed a new version that adds examples just for Electrum and Esplora, as there are already examples for Compact Filter and RPC backends.

I also updated the code to 0.20.1 and addressed @rajarshimaitra's suggestion not to add a new cargo project.

@w0xlt

Copy link
Copy Markdown
ContributorAuthor

The new push added the documentation suggested in #685, explaining how to use use-esplora-reqwest.

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

Concept ACK.. Few more fixes needs to be done..

Comment threadCargo.toml
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from 8f1ac3d to 400cbadCompareSeptember 1, 2022 19:51

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

Code looks good.. It need few more fixes to work.. Sorry if I reviewed prematurely.

Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
Comment threadexamples/esplora_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 2 times, most recently from a9c426e to 95e9b7fCompareSeptember 4, 2022 04:40

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

tACK 95e9b7f

Code loos good.. Thanks for the quick update.. One last comment..

Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated

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

ACK f13d5e6

One last fix to pass the tests..

Comment threadexamples/electrum_backend.rs Outdated
@w0xlt
w0xltforce-pushed the add_examples branch 5 times, most recently from 07f6747 to c7e1247CompareSeptember 5, 2022 14:04

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

tACK c7e1247

LGTM.. One suggestion maybe for a future PR.

Comment threadexamples/esplora_backend.rs Outdated
/// This can be run with `cargo run --features="use-esplora-reqwest, reqwest-default-tls" --example esplora_backend`
/// in the root folder.
///
/// Note: The configuration above uses asynchronous HTTP calls.

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.

Sorry I have missed this before. Nothing major, feel free to ignore for this PR.

Even though the calls are async in reqwest they are still blocking in our impl, using the await_or_block macro like this,

Ok(await_or_block!(self.url_client._get_tx(txid))?)

So to actually make the wallet calls async in the example you need to use the async-interface feature too.. In that case you will have await in your wallets calls in the example..

This PR is good to go on its own.. Maybe as a future PR an idea.

  • Transform this to a blocking example using ureq.
  • Create another fully async example using reqwest.

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.

That would be great. But, as mentioned above, the command cargo run --features="use-esplora-reqwest, reqwest-default-tls, async-interface" --example esplora_backend results in error.

I think the problem is here (src/lib:210)

#[cfg(all(feature = "async-interface", feature = "electrum"))]compile_error!("Features async-interface and electrum are mutually exclusive and cannot be enabled together");

Even there is no electrum in the features, it seems this is enabled by default. Is there a way to disable it ?

@notmandatorynotmandatorySep 6, 2022

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.

You can disable the default features (which are "key-value-db", "electrum") by adding --no-default-features, eg:

cargo run --no-default-features --features=use-esplora-reqwest,reqwest-default-tls,async-interface --example esplora_backend

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.

@notmandatory this worked. Thanks.

@rajarshimaitra I created two files examples/esplora_backend_synchronous.rs and examples/esplora_backend_asynchronous.rs in a2b6a40.

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 don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

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

ACK a2b6a40

Thanks for the split.. This now looks complete.. Few more nits..

Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_asynchronous.rs Outdated
Comment threadexamples/esplora_backend_synchronous.rs Outdated
Comment threadCargo.toml Outdated
Comment threadexamples/electrum_backend.rs Outdated
@rajarshimaitra

Copy link
Copy Markdown
Contributor

I don't know why CI / Rust fmt (pull_request) failed. I ran cargo fmt --all before committing.

It was some temporary problem with rust update server.. I restarted the tests and it passed..

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

tACK e50fcb6

@w0xlt

w0xlt commented Nov 1, 2022

Copy link
Copy Markdown
ContributorAuthor

Rebased.
Is any additional action required ?

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

Sorry took me some time to get back to this.. Thanks for pushing this through..

tACK f99a6b9

All looks good to me, and great work separating the blocking and async example separate. This is good to go, no more changes should be required..

@notmandatory
notmandatory merged commit 1c95ca3 into bitcoindevkit:masterNov 22, 2022

@22f-cy22f-cy left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

if [ "$PWD" = "$HOME" ]; then

@w0xlt
w0xlt deleted the add_examples branch November 30, 2022 04:44
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@w0xlt@notmandatory@rajarshimaitra@22f-cy