ElectrumClient
Elixir library simplifying calls to an Electrum RPC Server
Donations
This library is being built in the wild according to these principles
- Free to use
- Developer friendly
- Modular
Arguably, the most important part is that it is unbiased
.
If you want to keep it that way, and want to promote its active development, please send donations
here: bc1qcqg6flp09esqx6cl5h45epftyyc952j7au7h7w
Thank you!
Installation
def deps do
[
{:electrum_client, "~> 0.1.24"}
]
end
Example usage
Works both on mainnet
or testnet
, depends on the electrum server's configuration.
Example calling a testnet
server at 192.168.1.10
on port 60001
to get a list of
UTXO from the 67a5662abf889b5a28ffa821c1f85fd3ef9313756b881351d91a3671f3f52858
script hash.
ElectrumClient.start_link("192.168.1.10", 60001)
ElectrumClient.list_unspent("67a5662abf889b5a28ffa821c1f85fd3ef9313756b881351d91a3671f3f52858")
Local configuration
It is possible ton configure your own electrum server automatically when iex starts.
Create a .iex.local.exs
file containing the follwing contents, assuming your electrum
server is at 192.168.1.10
, answering to port 60001
:
ElectrumClient.start_link("192.168.1.10", 60001)
Get a bitcoin address balance
Send an address to get_balance
and get a number of confirmed and unconfirmed sats
ElectrumClient.get_balance("mrEpoDtBXKwrudWUhRqnz3j1yuj7kKHw5p")
%{confirmed: 1318882, unconfirmed: 0}
List a bitcoin address UTXOs
To get a list of unspent transaction outputs related to an address, send the address
to list_unspent
ElectrumClient.list_unspent("mrEpoDtBXKwrudWUhRqnz3j1yuj7kKHw5p")
[
%{
height: 2347375,
transaction_id: "dde058767aa566f2aba736320796771922efa6cb6e75f1cba3d47e4bfd5ae0d8",
value: 1318882,
vxid: 1
}
]
Broadcast a transaction
Send an encoded transaction to broadcast_transaction
and you'll get a transaction id back
ElectrumClient.broadcast_transaction("0100000001fa80e26e6427d965b670963747b8103226f40af76d358e47a53217db208fafc8010000006a47304402203234d17d3f6f132b81410d6a8c481912bc650c6dcb31d9a4a34d2ac0f6506e28022026146c17ba95b2c2719a2b4879a35dbbfcbd5144aecb3ff1a9a3cfc7894ae392012103ea1c6a4e250bc539f950c29f083f5e93aa0bf5d4a344af36a356ad4cf8a3ad2cffffffff02f0ff3700000000001976a9140afcad5c79123211ad61bd4723e1b23e9480f1c788ac10270000000000001976a9140fe85c1741be269c77f21c3a0386b8a2fb84ff8388ac00000000")
{:ok, "ba9e74b6359c5ff49bb5a1dc0979ce85db8ee45aa90fbf170ff72dec0aad542f"}
Get a transaction's details
Send a transaction id to get_transaction
to get a map containing all the transaction's details
ElectrumClient.get_transaction "05517750a78fb8c38346b1bf5908d71abe728811b643105be6595e11a9392373"
%BitcoinLib.Transaction{
version: 1,
inputs: [
%BitcoinLib.Transaction.Input{
txid: "420c552d7821da5da61be91dffe984537f460dc668f0766f6c2e1c7a10287610",
vout: 0,
script_sig: [%BitcoinLib.Script.Opcodes.Data{value: <<0x30440220571a1484112982604f16f2d1a49c862e2093cedfaf3042af42d7b587c220fbff022055435f538623f09572b87770cf93d7183d1bcb7503895682672f8f98134b320e01::568>>},
%BitcoinLib.Script.Opcodes.Data{value: <<0x02f942091e070d59e2f86e17b77e4f96539752f19f360dbf87ef15ea1f0fe8a4e2::264>>}],
sequence: 4294967295
}
],
outputs: [
%BitcoinLib.Transaction.Output{
value: 4000,
script_pub_key: [%BitcoinLib.Script.Opcodes.Stack.Dup{},
%BitcoinLib.Script.Opcodes.Crypto.Hash160{},
%BitcoinLib.Script.Opcodes.Data{value: <<0x09d6cbc4a478c8f1cbde9085b10fb84519591afb::160>>},
%BitcoinLib.Script.Opcodes.BitwiseLogic.EqualVerify{},
%BitcoinLib.Script.Opcodes.Crypto.CheckSig{script: <<0x76a91409d6cbc4a478c8f1cbde9085b10fb84519591afb88ac::200>>}]
},
%BitcoinLib.Transaction.Output{
value: 5000,
script_pub_key: [%BitcoinLib.Script.Opcodes.Stack.Dup{},
%BitcoinLib.Script.Opcodes.Crypto.Hash160{},
%BitcoinLib.Script.Opcodes.Data{value: <<0xe8046c97f9c1c38ff6c15e4d7696385309d54388::160>>},
%BitcoinLib.Script.Opcodes.BitwiseLogic.EqualVerify{},
%BitcoinLib.Script.Opcodes.Crypto.CheckSig{script: <<0x76a914e8046c97f9c1c38ff6c15e4d7696385309d5438888ac::200>>}]
}
],
locktime: 0
}