public inbox for bitcoindev@googlegroups.com
 help / color / mirror / Atom feed
From: "'Dr. Craig S. Wrong' via Bitcoin Development Mailing List" <bitcoindev@googlegroups.com>
To: Bitcoin Development Mailing List <bitcoindev@googlegroups.com>
Subject: [bitcoindev] Pure Swift Bitcoin Protocol implementation (largely experimental)
Date: Mon, 7 Oct 2024 05:16:09 -0700 (PDT)	[thread overview]
Message-ID: <c8a0717f-4576-4fb7-ac5c-a2a1ab7a2eden@googlegroups.com> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 2501 bytes --]

Hello there!

I wanted to share with y'all a project that I've been working on for more 
than two years called Swift Bitcoin 
(https://github.com/swift-bitcoin/swift-bitcoin 
/ https://swift-bitcoin.github.io)

It started as a way for me to test my own knowledge about the way Bitcoin 
works internally and externally. I first took a stab at implementing the 
various BIPs including with their respective test vectors in my favorite 
language Swift. I then started porting over additional unit tests from the 
Bitcoin Core project which helped me understand a lot of what happens under 
the hood.

While far from complete, today the package offers a comprehensive set of 
idiomatic Swift APIs which covers ECC and Bitcoin cryptography (uses 
libsecp256k1), hash functions, codecs, a full SCRIPT interpreter, 
transaction composition, signature verification, wallet functionality 
(addresses, key derivation, mnemonic, transaction input signing), 
blockchain, mining, RPC and P2P transport (WIP).

About some the advantages of using Swift I can mention the use of actors 
for isolation of mutable state and structured concurrency which guarantees 
data race safety. These are particularly noticeable at the wire protocol 
level where I'm leveraging the SwiftNIO library for non-blocking I/O.

The code does not rely on third party dependencies and produces a very fast 
and small binary which could eventually be suitable for embedded systems 
(coming soon). For Apple platform of course this library fits right in but 
everything is developed and tested on Linux. Also with C / C++ 
interoperability it can also be integrated into any CMake-based project.

Anyway if anyone is interested in knowing more or becoming a contributor 
please reach out to me at toximaxi (at) proton.me. I'm not a protocols guy 
so progress in that area has been slow and I could use some help in that 
particular area as well as many others.

Aside from that let me know what you think. Could an 
experimental/educational project like this one evolve into something useful 
for others?

Thanks everyone for taking the time.

Cheers!

-- 
You received this message because you are subscribed to the Google Groups "Bitcoin Development Mailing List" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bitcoindev+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/bitcoindev/c8a0717f-4576-4fb7-ac5c-a2a1ab7a2eden%40googlegroups.com.

[-- Attachment #1.2: Type: text/html, Size: 2974 bytes --]

                 reply	other threads:[~2024-10-07 12:17 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c8a0717f-4576-4fb7-ac5c-a2a1ab7a2eden@googlegroups.com \
    --to=bitcoindev@googlegroups.com \
    --cc=toximaxi@proton.me \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox