Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/demining/rust-bitcoinconsensus-google-colab
Bitcoin's libbitcoinconsenus.a with Rust binding. Built from Bitcoin sources with cargo Google Colab
https://github.com/demining/rust-bitcoinconsensus-google-colab
bitcoin bitcoin-api bitcoin-core bitcoin-payment bitcoin-transaction bitcoin-wallet colab colab-notebook colab-notebooks colab-tutorial colaboratory google-colab google-colab-notebook google-colab-notebooks google-colab-tutorial google-colaboratory google-colaboratory-notebooks googlecolab
Last synced: 4 days ago
JSON representation
Bitcoin's libbitcoinconsenus.a with Rust binding. Built from Bitcoin sources with cargo Google Colab
- Host: GitHub
- URL: https://github.com/demining/rust-bitcoinconsensus-google-colab
- Owner: demining
- License: apache-2.0
- Created: 2022-02-17T20:41:15.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2022-07-02T01:07:38.000Z (over 2 years ago)
- Last Synced: 2024-11-15T04:07:32.040Z (4 days ago)
- Topics: bitcoin, bitcoin-api, bitcoin-core, bitcoin-payment, bitcoin-transaction, bitcoin-wallet, colab, colab-notebook, colab-notebooks, colab-tutorial, colaboratory, google-colab, google-colab-notebook, google-colab-notebooks, google-colab-tutorial, google-colaboratory, google-colaboratory-notebooks, googlecolab
- Language: Rust
- Homepage:
- Size: 6.23 MB
- Stars: 0
- Watchers: 2
- Forks: 11
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
[![Status](https://travis-ci.org/rust-bitcoin/rust-bitcoinconsensus.png?branch=master)](https://travis-ci.org/rust-bitcoin/rust-bitcoinconsensus)
-------------------------
### Run rust-bitcoinconsensus-Google-Colabhttps://colab.research.google.com/drive/1OShIMVcFZ_khsUIBOIV1lzrqAGo1gfm_?usp=sharing
-------------------------
This project builds libbitcoinconsensus library from Bitcoin's C++ sources using cargo and offers Rust binding to its API.
Libbitcoinconsenus allows transaction verification using Bitcoins unique script engine.
Bitcoin enabled applications SHOULD use libbitcoinconsensus library to avoid accepting transactions that the Bitcoin network nodes would not.This project simplifies Rust developer's life by creating the libbitcoinconsensus library with cargo.
No need to deal with the archaic C++ toolchain directly.
This also simplifies cross-compiling the consenus library e.g. for a mobile application.Libbitcoinconsenus refers to code from another library [secp256k1](https://github.com/bitcoin-core/secp256k1).
A snapshot of that library is also included into Bitcoin sources, therefore it could be backed into libbitcoinconsenus.
A typical Bitcoin enabled application will however want to access further secp256k1 functions.
The project [rustc-secp256k1](https://github.com/rust-bitcoin/rust-secp256k1) offers a cargo build and Rust bindings,
therefore decided to depend on that instead of compiling the Bitcoin embedded sources into libbitcoinconsensus.
This introduces a risk, since a difference between the two secp256k1 sources could break consensus with Bitcoin.## Build
This project has a submodule (the Bitcoin Core sources), you have to clone it using:
`
git clone --recurse-submodules [email protected]:rust-bitcoin/rust-bitcoinconsensus.git
`then build it simple with:
`
cargo build
`I verified the build for Linux and OSX. Aleksey Sidorov contributed the windows build. PRs are welcome to extend support for other platforms.
## MSRV
The MSRV of this crate is 1.29.0.
The build dependency `cc` might require a more recent version of the Rust compiler.
To ensure compilation with Rust 1.29.0, pin its version in your `Cargo.lock`
with `cargo update -p cc --precise 1.0.41`. If you're using `secp256k1` in a library,
to make sure it compiles in CI, you'll need to generate a lockfile first.
Example for Travis CI:
```yml
before_script:
- if [ "$TRAVIS_RUST_VERSION" == "1.29.0" ]; then
cargo generate-lockfile --verbose && cargo update -p cc --precise "1.0.41" --verbose;
fi
```## API
The API is very basic, exposing Bitcoin's as is. This is intentional to keep this project minimal footprint and no further runtime dependencies. You will need another Rust library to serialize Bitcoin transactions and scripts.Verify a single spend (input) of a Bitcoin transaction:
`
verify (spent_output_script: &[u8], amount: u64, spending_transaction: &[u8], input_index: usize) -> Result<(), Error>
`### Arguments
* spend_output_script: a Bitcoin transaction output script to be spent
* amount: The spent output amount in satoshis
* spending_transaction: spending Bitcoin transaction, serialized in Bitcoin's on wire format
* input_index: index of the input within spending_transaction
### ExampleThe (randomly choosen) Bitcoin transaction [aca326a724eda9a461c10a876534ecd5ae7b27f10f26c3862fb996f80ea2d45d](https://blockchain.info/tx/aca326a724eda9a461c10a876534ecd5ae7b27f10f26c3862fb996f80ea2d45d)
spends one input, that is the first output of [95da344585fcf2e5f7d6cbf2c3df2dcce84f9196f7a7bb901a43275cd6eb7c3f](https://blockchain.info/tx/95da344585fcf2e5f7d6cbf2c3df2dcce84f9196f7a7bb901a43275cd6eb7c3f) with a value of 630482530 satoshisThe spending transaction in wire format is:
`
spending = 02000000013f7cebd65c27431a90bba7f796914fe8cc2ddfc3f2cbd6f7e5f2fc854534da95000000006b483045022100de1ac3bcdfb0332207c4a91f3832bd2c2915840165f876ab47c5f8996b971c3602201c6c053d750fadde599e6f5c4e1963df0f01fc0d97815e8157e3d59fe09ca30d012103699b464d1d8bc9e47d4fb1cdaa89a1c5783d68363c4dbc4b524ed3d857148617feffffff02836d3c01000000001976a914fc25d6d5c94003bf5b0c7b640a248e2c637fcfb088ac7ada8202000000001976a914fbed3d9b11183209a57999d54d59f67c019e756c88ac6acb0700
`The script of the first output of the spent transaction is:
`
spent = 76a9144bfbaf6afb76cc5771bc6404810d1cc041a6933988ac
`The (pseudo code) call:
`
verify(spent, 630482530, spending, 0)
`should return OK(())
**Note** that spent amount will only be checked for Segwit transactions. Above example is not segwit therefore verify will succeed with any amount.
----
| | Donation Address |
| --- | --- |
| ♥ __BTC__ | 1Lw2kh9WzCActXSGHxyypGLkqQZfxDpw8v |
| ♥ __ETH__ | 0xaBd66CF90898517573f19184b3297d651f7b90bf |