Records marriages and life events on the Ethereum blockchain with partner details, dates, and status tracking.
Historical Significance
The Ethereum Marriage registry is an early example of Ethereum being used for social and civil record applications rather than purely financial or token-based purposes.
Context
In early 2016, Ethereum developers were actively experimenting with real-world use cases to explore what decentralized computation and permanent public records could enable. This contract was deployed during a period of rapid experimentation following Ethereum’s 2015 launch, before standardized token interfaces and application patterns had fully emerged.
Key Facts
Description
The first marriage recorded on the Ethereum blockchain, deployed Jan 2, 2016 by hudson.eth (Hudson Jameson). It stores two partner names, a marriage date, a status field, and image and document hashes, and emits a MajorEvent log for marriage creation and later life events. This original on-chain version was never published; the source in Souptacular/marriage-dapp is a later revised deployment. Reconstructed and compiled with soljson v0.1.5 (optimizer ON) to a 1,378-byte runtime that matches the on-chain code byte for byte. The compiler is pinned to v0.1.6 or earlier because the contract logs an indexed bytes event argument without hashing it, behavior that v0.1.7 changed.
Source Verified
Runtime bytecode reproduced exactly with soljson v0.1.5+commit.23865e39, optimizer ON, via the legacy compile(source, 1) API. Output is identical across the v0.1.4-nightly to v0.1.6 window; v0.1.7 and later hash indexed bytes event arguments, which this contract does not do, pinning the compiler to v0.1.6 or earlier. External verification (2026-06-28): Sourcify verified, exact match on runtime and creation bytecode (matchId 38141663). Etherscan verified with v0.1.5+commit.23865e39, optimizer ON; the displayed source carries the EthereumHistory attribution line. Sourcify relayed the same source to Etherscan, Routescan, and Blockscout.
Heuristic Analysis
The following characteristics were detected through bytecode analysis and may not be accurate.
Frontier Era
The initial release of Ethereum. A bare-bones implementation for technical users.
Bytecode Overview
Verified Source Available
Source verified through compiler archaeology and exact bytecode matching.
View Verification ProofShow source code (Solidity)
// Submitted by EthereumHistory (ethereumhistory.com)
contract Marriage {
address owner;
bytes32 public partner1;
bytes32 public partner2;
uint256 public marriageDate;
bytes32 public marriageStatus;
bytes public imageHash;
bytes public marriageProofDoc;
function Marriage() {
owner = msg.sender;
}
function createMarriage(bytes32 partner1Entry, bytes32 partner2Entry, uint256 marriageDateEntry, bytes32 statusEntry, bytes descriptionEntry) {
partner1 = partner1Entry;
partner2 = partner2Entry;
marriageDate = marriageDateEntry;
setStatus(statusEntry);
bytes32 name = "Marriage Contract Creation";
MajorEvent(block.timestamp, marriageDate, name, descriptionEntry);
}
function setStatus(bytes32 status) {
marriageStatus = status;
}
function setImage(bytes IPFSImageHash) {
imageHash = IPFSImageHash;
}
function marriageProof(bytes IPFSProofHash) {
marriageProofDoc = IPFSProofHash;
}
function majorEvent(bytes32 name, bytes description, uint256 eventTimeStamp) {
MajorEvent(block.timestamp, eventTimeStamp, name, description);
}
function returnFunds() {
var b = this.balance;
owner.send(b);
}
event MajorEvent(uint256 logTimeStamp, uint256 eventTimeStamp, bytes32 indexed name, bytes indexed description);
}External Links
Related contracts
Stub
Same deployerA minimal owner-recording test contract Hudson Jameson deployed 89 seconds before his on-chain Marriage Registry. Runtime is the 6-byte empty body 0x606060405200.
0xd5d9ad...34c814January 2, 2016TerraNullius
Same eraOne of the earliest interactive contracts on Ethereum, allowing users to stake claims and leave permanent messages on the blockchain.
0x6e38a4...844d66August 7, 2015GlobalRegistrar
Same eraThe official Ethereum GlobalRegistrar deployed by the go-ethereum team in August 2015. This was the canonical name registry contract embedded as pre-compiled by
0x1392a4...770c35August 7, 2015NameReg
Same eraA simple name registry contract with reserve, transfer, setAddr, and disown functionality, deployed on Frontier Day 6.
0xc076cf...a339a5August 7, 2015GlobalRegistrar
Same eraThe second deployment of the official Ethereum GlobalRegistrar, deployed nine days after the first. Both deployments use identical bytecode pre-compiled and emb
0xf436ce...6267d0August 8, 2015globalregistrar
Same eraA second deployment of the Ethereum GlobalRegistrar — the early name registry that predated ENS — made on August 10, 2015.
0x2272d8...18f1a9August 10, 2015