  We implement two versions of a simple but illustrative smart contract: one in
Solidity on the Ethereum blockchain platform, and one in Plutus on the Cardano
platform, with annotated code excerpts and with source code attached. We get a
clearer view of the Cardano programming model in particular by introducing a
novel mathematical abstraction which we call Idealised EUTxO. For each version
of the contract, we trace how the architectures of the underlying platforms and
their mathematics affects the natural programming styles and natural classes of
errors. We prove some simple but novel results about alpha-conversion and
observational equivalence for Cardano, and explain why Ethereum does not have
them. We conclude with a wide-ranging and detailed discussion in the light of
the examples, mathematical model, and mathematical results so far.
