https://blog.stackademic.com/solidity-syntax-and-data-types-building-blocks-of-smart-contracts-e8c8ff6191b1