- Optional/nullable data types.
- Variant data types.
- Flag with extra information needed only in some cases (or different in different cases).
- Modeling states in a state machine where each state can have some data associated with it.
- List of operations for batch processing, where each operation can have its own arguments.
- Alternative to function overloading that allows avoiding combinatorial explosion when there are multiple parameters that need variants.
- Nested data structures with heterogenous nodes.
| // Copied from: https://ethfiddle.com/09YbyJRfiI | |
| // CryptoKitties Source code | |
| // Copied from: https://etherscan.io/address/0x06012c8cf97bead5deae237070f9587f8e7a266d#code | |
| pragma solidity ^0.4.11; | |
| /** | |
| * @title Ownable | |
| * @dev The Ownable contract has an owner address, and provides basic authorization control |
| 0x00 0 STOP | |
| 0x01 3 ADD | |
| 0x02 5 MUL | |
| 0x03 3 SUB | |
| 0x04 5 DIV | |
| 0x05 5 SDIV | |
| 0x06 5 MOD | |
| 0x07 5 SMOD | |
| 0x08 8 ADDMOD | |
| 0x09 8 MULMOD |
If you're reading this, you probably suggested to somebody that a particular technical problem could be solved with a blockchain.
Blockchains aren't a desirable thing; they're defined by having trustless consensus, which necessarily has to involve some form of costly signaling to work; that's what prevents attacks like sybil attacks.
In other words: blockchains must be expensive to operate, to work effectively. This makes it a last-resort solution, when you truly have no other options available for solving your problem; in almost every case you want a cheaper and less complex solution than a blockchain.
In particular, if your usecase is commercial, then you do not need or want trustless consensus. This especially includes usecases like supply chain tracking, ticketing, and so on. The whole *p