diff --git a/docs/HOWTO.rst b/docs/HOWTO.rst index ed8bf1c..e6151f5 100644 --- a/docs/HOWTO.rst +++ b/docs/HOWTO.rst @@ -23,15 +23,16 @@ DB Engine A database engine package is required; two are supported (see `Database Engine`_ below). ================ ======================== -You **must** be running a non-pruning bitcoin daemon with:: +You **must** be running a non-pruning Palladium daemon with:: + server=1 txindex=1 -set in its configuration file. If you have an existing installation -of bitcoind and have not previously set this you will need to reindex -the blockchain with:: +set in its configuration file (:file:`palladium.conf`). If you have an +existing installation of palladiumd and have not previously set +``txindex`` you will need to reindex the blockchain with:: - bitcoind -reindex + palladiumd -reindex which can take some time. @@ -47,11 +48,10 @@ used to either. When building the database from the genesis block, ElectrumX has to flush large quantities of data to disk and its DB. You will have a better experience if the database directory is on an SSD than on an -HDD. Currently to around height 611,600 of the Bitcoin blockchain the -final size of the leveldb database, and other ElectrumX file metadata -comes to just over 46.9GB (43.7 GiB). LevelDB needs a bit more for -brief periods, and the block chain is only getting longer, so I would -recommend having at least 70-80GB of free space before starting. +HDD. At around height 542,000 of the Palladium blockchain the final +size of a RocksDB database, and other ElectrumX file metadata, is +roughly 230 MB. The block chain only gets longer, so leave some room to +grow; a few GB of free space is plenty for now. Database Engine =============== @@ -87,8 +87,8 @@ Install the prerequisites above. Check out the code from Github:: - git clone https://github.com/spesmilo/electrumx.git - cd electrumx + git clone https://github.com/palladium-coin/plm-electrumx.git + cd plm-electrumx You can install with:: @@ -251,30 +251,9 @@ has its caches and disk I/O tuned to that task only. The :envvar:`CACHE_MB` environment variable controls the total cache size ElectrumX uses; see :ref:`here ` for caveats. -Here is my experience with the codebase of early 2017 (the current -codebase is faster), to given heights and rough wall-time. The period -from heights 363,000 to 378,000 is the most sluggish:: - - Machine A Machine B - 181,000 25m 00s 5m 30s - 283,500 1h 00m - 321,800 1h 40m - 357,000 12h 32m 2h 41m - 386,000 21h 56m 4h 25m - 414,200 1d 12h 29m 6h 30m - 447,168 2d 13h 20m 9h 47m - -*Machine A*: a low-spec 2011 1.6GHz AMD E-350 dual-core fanless CPU, -8GB RAM and a DragonFlyBSD UFS filesystem on an SSD. It requests -blocks over the LAN from a bitcoind on machine B. :envvar:`DB_CACHE` -the default of 1,200. LevelDB. - -*Machine B*: a late 2012 iMac running Sierra 10.12.2, 2.9GHz quad-core -Intel i5 CPU with an HDD and 24GB RAM. Running bitcoind on the same -machine. :envvar:`DB_CACHE` set to 1,800. LevelDB. - -For chains other than bitcoin-mainnet synchronization should be much -faster. +On a development machine (12 cores, RocksDB) with the daemon on the same host, building the database from +genesis to height 542,000 of the Palladium blockchain took about a minute. Blocks are small and the chain is short, +so synchronization is much faster than for large chains; times on other hardware will vary. .. note:: ElectrumX will not serve normal client connections until it has fully synchronized and caught up with your daemon. @@ -316,8 +295,8 @@ You can see the status of a running service with:: svstat ~/service/electrumx :command:`svscan` can of course handle multiple services -simultaneously from the same service directory, such as a testnet or -altcoin server. See the man pages of these various commands for more +simultaneously from the same service directory, such as a testnet +server. See the man pages of these various commands for more information. @@ -330,53 +309,29 @@ You can see the logs usefully like so:: Here is typical log output on startup:: - INFO:BlockProcessor:switching current directory to /crucial/server-good - INFO:BlockProcessor:using leveldb for DB backend - INFO:BlockProcessor:created new database - INFO:BlockProcessor:creating metadata diretcory - INFO:BlockProcessor:software version: ElectrumX 0.10.2 - INFO:BlockProcessor:DB version: 5 - INFO:BlockProcessor:coin: Bitcoin - INFO:BlockProcessor:network: mainnet - INFO:BlockProcessor:height: -1 - INFO:BlockProcessor:tip: 0000000000000000000000000000000000000000000000000000000000000000 - INFO:BlockProcessor:tx count: 0 - INFO:BlockProcessor:sync time so far: 0d 00h 00m 00s - INFO:BlockProcessor:reorg limit is 200 blocks - INFO:Daemon:daemon at 192.168.0.2:8332/ - INFO:BlockProcessor:flushing DB cache at 1,200 MB - INFO:Controller:RPC server listening on localhost:8000 - INFO:Prefetcher:catching up to daemon height 447,187... + INFO:Controller:software version: plm-electrumx 1.0.0 + INFO:Controller:aiorpcX version: 0.25.0 + INFO:Controller:supported protocol versions: 1.4-1.7.0 + INFO:Controller:reorg limit is 200 blocks + INFO:Daemon:daemon #1 at 127.0.0.1:2332/ (current) + INFO:DB:switching current directory to /var/lib/electrumx + INFO:DB:using rocksdb for DB backend + INFO:DB:created new database + INFO:DB:coin: Palladium + INFO:DB:network: mainnet + INFO:DB:height: -1 + INFO:DB:tx count: 0 + INFO:DB:flushing DB cache at 1,200 MB + INFO:Prefetcher:catching up to daemon height 542,044 (542,045 blocks behind) INFO:Prefetcher:verified genesis block with hash 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f - INFO:BlockProcessor:our height: 9 daemon: 447,187 UTXOs 0MB hist 0MB - INFO:BlockProcessor:our height: 52,509 daemon: 447,187 UTXOs 9MB hist 14MB - INFO:BlockProcessor:our height: 85,009 daemon: 447,187 UTXOs 12MB hist 31MB - INFO:BlockProcessor:our height: 102,384 daemon: 447,187 UTXOs 15MB hist 47MB + INFO:BlockProcessor:our height: 9 daemon: 542,044 UTXOs 0MB hist 0MB [...] - INFO:BlockProcessor:our height: 133,375 daemon: 447,187 UTXOs 80MB hist 222MB - INFO:BlockProcessor:our height: 134,692 daemon: 447,187 UTXOs 96MB hist 250MB - INFO:BlockProcessor:flushed to FS in 0.7s - INFO:BlockProcessor:flushed history in 16.3s for 1,124,512 addrs - INFO:BlockProcessor:flush #1 took 18.7s. Height 134,692 txs: 941,963 - INFO:BlockProcessor:tx/sec since genesis: 2,399, since last flush: 2,400 - INFO:BlockProcessor:sync time: 0d 00h 06m 32s ETA: 1d 13h 03m 42s + INFO:BlockProcessor:caught up to height 542047 + INFO:BlockProcessor:plm-electrumx 1.0.0 synced to height 542,047 -Under normal operation these cache stats repeat once or twice a -minute. UTXO flushes can take several minutes and look like this:: - - INFO:BlockProcessor:our height: 378,745 daemon: 447,332 UTXOs 1,013MB hist 184MB - INFO:BlockProcessor:our height: 378,787 daemon: 447,332 UTXOs 1,014MB hist 194MB - INFO:BlockProcessor:flushed to FS in 0.3s - INFO:BlockProcessor:flushed history in 13.4s for 934,933 addrs - INFO:BlockProcessor:flushed 6,403 blocks with 5,879,440 txs, 2,920,524 UTXO adds, 3,646,572 spends in 93.1s, committing... - INFO:BlockProcessor:flush #120 took 226.4s. Height 378,787 txs: 87,695,588 - INFO:BlockProcessor:tx/sec since genesis: 1,280, since last flush: 359 - INFO:BlockProcessor:sync t ime: 0d 19h 01m 06s ETA: 3d 21h 17m 52s - INFO:BlockProcessor:our height: 378,812 daemon: 447,334 UTXOs 10MB hist 10MB - -The ETA shown is just a rough guide and in the short term can be quite -volatile. It tends to be a little optimistic at first; once you get -to height 280,000 is should be fairly accurate. +While syncing, the ``our height`` lines repeat once or twice a minute with the +sizes of the caches, which are flushed to disk when they reach :envvar:`CACHE_MB`. +Once synced, the server follows new blocks and the mempool. .. _SSL certificates: @@ -436,7 +391,7 @@ You can then set the port as follows and advertise the service externally on the REPORT_SSL_PORT=110 -.. _`contrib/systemd/electrumx.service`: https://github.com/spesmilo/electrumx/blob/master/contrib/systemd/electrumx.service +.. _`contrib/systemd/electrumx.service`: https://github.com/palladium-coin/plm-electrumx/blob/main/contrib/systemd/electrumx.service .. _`daemontools`: http://cr.yp.to/daemontools.html .. _`runit`: http://smarden.org/runit/index.html .. _`aiohttp`: https://pypi.python.org/pypi/aiohttp diff --git a/docs/architecture.rst b/docs/architecture.rst index edaea58..cef0e0a 100644 --- a/docs/architecture.rst +++ b/docs/architecture.rst @@ -31,13 +31,13 @@ Handles JSON Electrum client connections over TCP or SSL. One instance per client session. Should be the only component concerned with the details of the Electrum wire protocol. -Not started until the Block Processor has caught up with bitcoind. +Not started until the Block Processor has caught up with palladiumd. Daemon ------ -Encapsulates the RPC wire protocol with bitcoind for the whole server. -Transparently handles temporary bitcoind connection errors, and fails +Encapsulates the RPC wire protocol with palladiumd for the whole server. +Transparently handles temporary palladiumd connection errors, and fails over if necessary. Notifies the Mempool when the list of mempool transaction hashes is @@ -62,14 +62,14 @@ Prefetcher ---------- Cooperates with the Block Processor to asynchronously prefetch blocks -from bitcoind. Once it has caught up it additionally asks the Daemon -to refresh its view of bitcoind's mempool transaction hashes. Serves +from palladiumd. Once it has caught up it additionally asks the Daemon +to refresh its view of palladiumd's mempool transaction hashes. Serves blocks to the Block Processor via a queue. Mempool ------- -Handles all the details of maintaining a representation of bitcoind's +Handles all the details of maintaining a representation of palladiumd's mempool state. Obtains the list of current mempool transaction hashes from the Daemon when notified by the Prefetcher. diff --git a/docs/changelog.rst b/docs/changelog.rst index 1a3ecfe..de930a9 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -2,6 +2,27 @@ ChangeLog =========== +Version 1.0.0 (plm-electrumx) +============================= + +First release of the Palladium fork. Based on a snapshot of upstream ElectrumX 2.0.0 +(commit ``280cb339aa158e099eb936033eecd15719770651``); the entries below this one are the history of upstream. + +* new: ``Palladium``, ``PalladiumTestnet`` and ``PalladiumRegtest`` coins, now the only ones (the default ``COIN`` + is ``Palladium``). +* Palladium Core is based on Bitcoin Core 0.19: the daemon version/index checks are disabled, ``txindex=1`` is + required, and ``blockchain.outpoint.subscribe`` / ``blockchain.transaction.broadcast_package`` return a daemon + error to clients. +* removed: all other coins, their transaction deserializers, session/daemon/block processor classes, tests, + pip extras and ``contrib`` files. +* new: ``Dockerfile`` and ``docker-compose.yml`` to run next to the Palladium node container, with automatic + self-signed SSL certificate, data in ``~/.plm-electrumx`` and ``DONATION_ADDRESS`` support. +* new: CI on ``main`` with a Docker job; ``README.md`` and ``DEPLOY.md``. +* changed: package name ``plm-electrumx``, own versioning. + +Upstream history +================ + Version 2.0.0 (03 July 2026) ============================== diff --git a/docs/conf.py b/docs/conf.py index 33f6936..704af2c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -81,9 +81,9 @@ html_theme = 'alabaster' # documentation. # html_theme_options = { - 'description': 'Lightweight Electrum Server in Python', - 'github_user': 'spesmilo', - 'github_repo': 'electrumx', + 'description': 'Electrum server for Palladium (PLM)', + 'github_user': 'palladium-coin', + 'github_repo': 'plm-electrumx', 'github_button': True, 'github_type': 'star', 'github_banner': True, diff --git a/docs/environment.rst b/docs/environment.rst index 7f9ca95..2f1ef9f 100644 --- a/docs/environment.rst +++ b/docs/environment.rst @@ -111,7 +111,7 @@ Here are some examples of valid services:: rpc:// # RPC protocol, default host and port .. note:: ElectrumX will not serve any incoming connections until it has fully caught up - with your bitcoin daemon. The only exception is local **RPC** connections, + with your Palladium daemon. The only exception is local **RPC** connections, which are served at any time after the server has initialized. .. envvar:: SERVICES @@ -268,8 +268,8 @@ These environment variables are optional: The maximum number of blocks to be able to handle in a chain reorganisation. ElectrumX retains some fairly compact undo information for this many blocks in levelDB. The default is a - function of :envvar:`COIN` and :envvar:`NET`; for Bitcoin mainnet it - is 200. + function of :envvar:`COIN` and :envvar:`NET`; for Palladium mainnet it + is 200 (8,000 on testnet and regtest). .. envvar:: EVENT_LOOP_POLICY @@ -314,8 +314,7 @@ raise them. .. envvar:: MAX_SEND The maximum size of a response message to send over the wire, in - bytes. Defaults to 8,100,000 (except for AuxPoW coins, which default - to 10,000,000). Values smaller than 350,000 are taken as 350,000 + bytes. Defaults to 8,100,000. Values smaller than 350,000 are taken as 350,000 because standard Electrum protocol header "chunk" requests are almost that large. @@ -506,5 +505,5 @@ your available physical RAM: I do not recommend raising this above 2000. -.. _lib/coins.py: https://github.com/spesmilo/electrumx/blob/master/src/electrumx/lib/coins.py +.. _lib/coins.py: https://github.com/palladium-coin/plm-electrumx/blob/main/src/electrumx/lib/coins.py .. _uvloop: https://pypi.python.org/pypi/uvloop diff --git a/docs/features.rst b/docs/features.rst index 39872a7..e1a9d16 100644 --- a/docs/features.rst +++ b/docs/features.rst @@ -2,11 +2,8 @@ Features ======== - Efficient, lightweight reimplementation of electrum-server -- Fast synchronization of bitcoin mainnet from Genesis. Recent - hardware should synchronize in well under 24 hours. The fastest - time to height 448k (mid January 2017) reported is under 4h 30m. On - the same hardware JElectrum would take around 4 days and - electrum-server probably around 1 month. +- Fast synchronization of Palladium mainnet from Genesis: about a + minute to height 542k on a modern development machine with RocksDB. - Various configurable means of controlling resource consumption and handling bad clients and denial of service attacks. These include maximum connection counts, subscription limits per-connection and diff --git a/docs/index.rst b/docs/index.rst index 5b3643f..5726f3d 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,18 +1,17 @@ -========= -ElectrumX -========= +============= +plm-electrumx +============= -.. image:: https://github.com/spesmilo/electrumx/actions/workflows/ci.yml/badge.svg?branch=master - :target: https://github.com/spesmilo/electrumx/actions/workflows/ci.yml +.. image:: https://github.com/palladium-coin/plm-electrumx/actions/workflows/ci.yml/badge.svg?branch=main + :target: https://github.com/palladium-coin/plm-electrumx/actions/workflows/ci.yml -This project is a fork of `kyuupichan/electrumx `_. -The original author dropped support for Bitcoin, which we intend to keep. +plm-electrumx is an Electrum protocol server for Palladium (PLM). It is a fork of +`spesmilo/electrumx `_ (which is itself a fork of +`kyuupichan/electrumx `_) that supports Palladium only. -ElectrumX allows users to run their own Electrum server. It connects to your -full node and indexes the blockchain, allowing efficient querying of history of -arbitrary addresses. The server can be exposed publicly, and joined to the public network -of servers via peer discovery. As of May 2020, a significant chunk of the public -Electrum server network runs ElectrumX. +It connects to your Palladium full node and indexes the blockchain, allowing efficient +querying of history of arbitrary addresses. The server can be exposed publicly, and joined +to the network of servers via peer discovery. The current version is |release|. @@ -20,12 +19,12 @@ Source Code =========== The project is hosted on `GitHub -`_. and uses `GitHub Actions -`_ for Continuous +`_ and uses `GitHub Actions +`_ for Continuous Integration. Please submit an issue on the `bug tracker -`_ if you have found a +`_ if you have found a bug or have a suggestion to improve the server. Authors and License @@ -35,19 +34,16 @@ Neil Booth wrote the vast majority of the code; see :ref:`Authors`. Python version at least 3.10 is required. The code is released under the `MIT Licence -`_. +`_. Getting Started =============== See :ref:`HOWTO`. -There is also an `installer`_ available that simplifies the -installation on various Linux-based distributions, and a `Dockerfile`_ -available. - -.. _installer: https://github.com/bauerj/electrumx-installer -.. _Dockerfile: https://github.com/lukechilds/docker-electrumx +The repository also contains a :file:`Dockerfile` and a :file:`docker-compose.yml` that run the server next +to a Palladium node container; see `README.md `_ +and `DEPLOY.md `_ (ports, firewall, SSL, RPC credentials). Documentation ============= diff --git a/docs/peer_discovery.rst b/docs/peer_discovery.rst index 423156c..0e1e76a 100644 --- a/docs/peer_discovery.rst +++ b/docs/peer_discovery.rst @@ -25,7 +25,7 @@ process. Ideally it should have at least 4 servers that have shown commitment to reliable service. In ElectrumX this is a per-coin property in `lib/coins.py -`_. +`_. server.peers.subscribe diff --git a/docs/release_process.md b/docs/release_process.md index 6847b82..2d27ed0 100644 --- a/docs/release_process.md +++ b/docs/release_process.md @@ -2,32 +2,20 @@ ### 1. Add changelog +Add an entry for the new version at the top of `docs/changelog.rst`. + ### 2. Update version number +Both files must have the same version (it is shown to clients by `server.version`, in the banner and in the logs): + - `docs/conf.py` -- `electrumx/__init__.py` +- `src/electrumx/__init__.py` -### 3. Tag +### 3. Check -``` -$ git tag -s "$VERSION" -m "$VERSION" -$ git push "$REMOTE_ORIGIN" tag "$VERSION" -``` +The CI on `main` (`.github/workflows/ci.yml`) must pass: tests, pycodestyle, docs build, and the Docker image with its +smoke test (`contrib/docker-smoke-test.sh`). -### 4. Build sdist +### 4. Deploy -see [`contrib/sdist/`](contrib/sdist) - -``` -$ ELECBUILD_COMMIT=HEAD ELECBUILD_NOCACHE=1 ./contrib/sdist/build.sh -``` - -### 5. Upload to PyPI - -``` -// $ python3 -m twine upload --repository testpypi dist/$DISTNAME -$ python3 -m twine upload dist/$DISTNAME -``` - -This will prompt for a username and password. For the username, use `__token__`. -For the password, use API token from https://pypi.org/manage/account/ , including the pypi- prefix. +On the server: `git pull && docker compose up -d --build` (see `DEPLOY.md`). diff --git a/docs/rpc-interface.rst b/docs/rpc-interface.rst index a9fbf52..87f636e 100644 --- a/docs/rpc-interface.rst +++ b/docs/rpc-interface.rst @@ -69,10 +69,10 @@ A typical result is as follows (with annotated comments):: $ electrumx_rpc getinfo { - "coin": "Bitcoin", - "daemon": "127.0.0.1:9334/", - "daemon height": 572154, # The daemon's height when last queried - "db height": 572154, # The height to which the DB is flushed + "coin": "Palladium", + "daemon": "127.0.0.1:2332/", + "daemon height": 542048, # The daemon's height when last queried + "db height": 542048, # The height to which the DB is flushed "groups": 586, # The number of session groups "history cache": "185,014 lookups 9,756 hits 1,000 entries", "merkle cache": "280 lookups 54 hits 213 entries", @@ -192,12 +192,12 @@ Peer data is obtained via a peer discovery protocol documented :ref:`here `:: $ electrumx_rpc peers - Host Status TCP SSL Server Min Max Pruning Last Good Last Try Tries Source IP Address - bch.tedy.pw good 50001 50002 ElectrumX 1.2.1 0.9 1.2 07h 29m 23s 07h 30m 40s 0 peer 185.215.224.26 - shsmithgoggryfbx.onion good 60001 60002 ElectrumX 1.2.1 0.9 1.2 07h 30m 34s 07h 30m 38s 0 peer - bccarihace4jdcnt.onion good 52001 52002 ElectrumX 1.2.1 0.9 1.2 07h 30m 34s 07h 30m 39s 0 peer + Host Status TCP SSL Server Min Max Pruning Last Good Last Try Tries Source IP Address + electrum1.example.com good 50001 50002 plm-electrumx 1.0.0 1.4 1.7 07h 29m 23s 07h 30m 40s 0 peer 192.0.2.10 + electrum2.example.com good 50001 50002 plm-electrumx 1.0.0 1.4 1.7 07h 30m 34s 07h 30m 38s 0 peer [...] - electroncash.checksum0.com good 50001 50002 ElectrumX 1.2.1 0.9 1.1 07h 30m 40s 07h 30m 41s 0 peer 149.56.198.233 + +(The host names above are examples.) .. _query: @@ -205,26 +205,25 @@ query ----- Run a query of the UTXO and history databases against one or more -addresses, hex scripts or ASCII names (for coins that have an index -on names like Namecoin). `--limit ` or `-l ` limits the output +addresses or hex scripts. `--limit ` or `-l ` limits the output for each kind to that many entries. History is printed in blockchain order; UTXOs in an arbitrary order. For example:: - $ electrumx_rpc query --limit 5 76a91462e907b15cbf27d5425399ebf6f0fb50ebb88f1888ac - Script: 76a91462e907b15cbf27d5425399ebf6f0fb50ebb88f1888ac - History #1: height 123,723 tx_hash 3387418aaddb4927209c5032f515aa442a6587d6e54677f08a03b8fa7789e688 - History #2: height 127,280 tx_hash 4574958d135e66a53abf9c61950aba340e9e140be50efeea9456aa9f92bf40b5 - History #3: height 127,909 tx_hash 8b960c87f9f1a6e6910e214fcf5f9c69b60319ba58a39c61f299548412f5a1c6 - History #4: height 127,943 tx_hash 8f6b63012753005236b1b76e4884e4dee7415e05ab96604d353001662cde6b53 - History #5: height 127,943 tx_hash 60ff2dfdf67917040139903a0141f7525a7d152365b371b35fd1cf83f1d7f704 - UTXO #1: tx_hash 9aa497bf000b20f5ec5dc512bb6c1b60b68fc584d38b292b434e839ea8807bf0 tx_pos 0 height 254,148 value 5,500 - UTXO #2: tx_hash 1c998142a5a5aae6f8c1eab245351413fe8d4032a3f14345f9943a0d0bc90ec0 tx_pos 0 height 254,161 value 5,500 - UTXO #3: tx_hash 53345491b4829140be53f30079c6e4556a18545343b122900ebbfa158f9ca97a tx_pos 0 height 254,163 value 5,500 - UTXO #4: tx_hash c71ad947ac46af217da3cd5521113cbd03e36ddada2b4452afe6c15f944d2529 tx_pos 0 height 372,916 value 1,000 - UTXO #5: tx_hash c944a6acac054275a5e294e746d9ce79f6dcae91f3b4f5a84561aee6404a55b3 tx_pos 0 height 254,148 value 5,500 - Balance: 17.8983303 BCH + $ electrumx_rpc query --limit 5 76a91405d230d91166fa0e82b9142e66172846855e469a88ac + Script: 76a91405d230d91166fa0e82b9142e66172846855e469a88ac + History #0: height 28,227 txid 021bd9352ba2c0e8847f642753b0dea07db9fc76a991b154c8806b528280a1dc + History #1: height 28,234 txid c7da889fdf7686a6f2f8a79ca1275b05b08f0d2f9051c85d1c2c70c0949ae025 + History #2: height 28,242 txid b940e1d63caf8b73562705df6bdf1f4c2e2ef47df5be46483c7ba4fd02fc7f66 + History #3: height 28,339 txid dd844c6838b9dfd18619dbf2816f22249c063755afaeaf67ed1e1118ad662616 + History #4: height 28,368 txid 0d95947d605984d6d1d32bc252af398a18e218fe4a7625c1496f88abd4a8a07e + UTXO #1: txid 407a1be25f9962e83d1734fbf9773094428c77f835276cf965eef9f9778770c1 tx_pos 2 height 130,276 value 250,000,000 + UTXO #2: txid 0cd05022306e2cfdf30f1def563cb6fa2b5e0d13896da9531ce93c86296d8855 tx_pos 1 height 130,286 value 100,000,000 + UTXO #3: txid 6b172cf9477aec19198b89fa53600cfdb27ed0dd6d6c945ced5e0f02daa673fb tx_pos 1 height 130,359 value 300,000,000 + UTXO #4: txid b8a9992d63fa185c410f9d6855c39bc4afc0002b81b21a29c947aeac6f5b6428 tx_pos 0 height 130,447 value 250,000,000 + UTXO #5: txid 3cb0f3f21c8aad26293dd0228595c4f0f1c0e1f2863e756bb2d994e0fe2ba6a8 tx_pos 1 height 130,501 value 100,000,000 + Balance: 16.500000 PLM reorg -----