Rerouted (renamed, verified). The GitHub user or repository was renamed. The tag is still there, at the new name. The Lamdera package server serves a copy recovered from https://github.com/IntrepidShape/elm-web3.
What we checked: The repo moved to github.com/IntrepidShape/elm-web3 and tag 1.0.0 is there; its commit 9d919244f65e is from 2026-05-09 11:48 UTC, before the version was published (2026-05-09 11:58 UTC); elm.json is byte-identical to package.elm-lang.org's; the exposed modules match docs.json; the zip's SHA-1 is not the published one (GitHub's zip no longer comes out byte for byte the same), so the contents were checked instead.
The Lamdera compiler uses this copy and prints a one-line notice saying so. elm itself fails to download this version.
Details · package.elm-lang.org's zip: https://github.com/intrepidshape/elm-web3/zipball/1.0.0/
Transaction lifecycle state machine.
Every transaction goes through explicit states. Pattern matching forces you to
handle every case — no "transaction failed silently" bugs. The state machine
follows the TLA+ spec in proofs/tla/TransactionSpec.tla:
terminal states never transition out (except via TxReset),
and confirmation counts only increase.
case tx.status of
Idle ->
viewBuyButton
AwaitingSignature ->
viewSigningSpinner
Submitted hash ->
viewPendingWithHash hash
Confirming hash n ->
viewConfirming n
Confirmed receipt ->
viewSuccess receipt
Failed err ->
viewError err
Rejected ->
viewRejectedTo poll for a receipt after submission, encode a RequestReceipt command:
case tx.status of
Submitted hash ->
( model
, web3Cmd (Tx.encodeCmd (Tx.RequestReceipt hash "my-tx"))
)
_ ->
( model, Cmd.none )To reset a terminal transaction back to Idle:
Tx.update Tx.TxReset tx.statusRelated modules: Web3.Contract.Send to build and encode write calls;
Web3.Contract.Call to simulate writes before broadcasting.
Messages from the JS transaction port.
A confirmed transaction receipt, including emitted logs.
A single log entry emitted during a transaction.
Update transaction status from a port message.
Transitions are guarded to match the TLA+ GuardedNext specification:
Is this status terminal (no more updates expected)?
Number of confirmations for a confirmed transaction given the current block number.
Apply a list of event decoders to the logs in a receipt, collecting all successfully decoded events.
type MyEvent
= Transfer { from : Address, to : Address, amount : BigInt }
| Approval { owner : Address, spender : Address, amount : BigInt }
decodeTransfer : EventLog -> Maybe MyEvent
decodeTransfer log =
-- match topic[0] to Transfer signature, then decode
...
events : List MyEvent
events =
parseReceiptEvents [ decodeTransfer, decodeApproval ] receipt
Transaction lifecycle status. Cannot be in an invalid state.