Skip to content

Instantly share code, notes, and snippets.

@Jesserc
Last active November 17, 2023 21:47
Show Gist options
  • Save Jesserc/2876350a667d6222230442a0ee2fc289 to your computer and use it in GitHub Desktop.
Save Jesserc/2876350a667d6222230442a0ee2fc289 to your computer and use it in GitHub Desktop.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "contracts/1_Storage.sol";
contract Example {
// DATA-TYPES
/*
strings, boolean, integers (uint8,16,24,32,40,48,56,64,72,80,88,96,104,...256, int8,int16...int256), bytes1,2,3,4,5,6...32 (value types) and then bytes(reference type), address, arrays, structs, enums, mappings
uint8 - 2**8 -1
uint16 => 2**16 -1
...
uint256 => 2**256 -1 == 256 bits
if uint8 can hold 0-255 => 2**8 -1
then int8 can hold positive numbers from 0-(255/2)
then the rest is the for negative number -1-(-128)
*/
// VALUE TYPES
bool public condition;
bool public status = true;
// integers (decimals) (uint - ONLY positive integers/numbers, int - negative & positive integers/numbers)
uint16 public integer;
// uint8;
uint number = 115792089237316195423570985008687907853269984665640564039457584007913129639935;
// uint num2 = -2; // does not work
int negativeNumber = -20;
int positiveNumber = 20;
// addresses
address public myAddress; // 20 bytes - 40 hex characters // hex are 0-9,a-f base16
bytes1 public v0;
bytes2 private v1 = 0xaf6f;
bytes3 v2 = 0xb0bef3;
bytes4 v3 = 0xb0bef354;
bytes5 v4 = 0xb0bef3540f;
bytes6 v5 = 0xb0bef3540f44;
bytes7 v6 = 0xb0bef3540f44ff;
//...bytes32
// REFERENCE TYPES
// Strings
// string name;
string public name = "Jesserc";
bytes data = hex"608060405260015f60016101000a81548160ff021916908315150217905550600a6002557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6003556014600455735b38da6a701c568545dcfcb03fcb875f56beddc460055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600781526020017f4a65737365726300000000000000000000000000000000000000000000000000815250600690816100e49190610330565b503480156100f0575f80fd5b506103ff565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061017157607f821691505b6020821081036101845761018361012d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826101ab565b6101f086836101ab565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61023461022f61022a84610208565b610211565b610208565b9050919050565b5f819050919050565b61024d8361021a565b6102616102598261023b565b8484546101b7565b825550505050565b5f90565b610275610269565b610280818484610244565b505050565b5b818110156102a3576102985f8261026d565b600181019050610286565b5050565b601f8211156102e8576102b98161018a565b6102c28461019c565b810160208510156102d1578190505b6102e56102dd8561019c565b830182610285565b50505b505050565b5f82821c905092915050565b5f6103085f19846008026102ed565b1980831691505092915050565b5f61032083836102f9565b9150826002028217905092915050565b610339826100f6565b67ffffffffffffffff81111561035257610351610100565b5b61035c825461015a565b6103678282856102a7565b5f60209050601f831160018114610398575f8415610386578287015190505b6103908582610315565b8655506103f7565b601f1984166103a68661018a565b5f5b828110156103cd578489015182556001820191506020850194506020810190506103a8565b868310156103ea57848901516103e6601f8916826102f9565b8355505b6001600288020188555050505b505050505050565b603e8061040b5f395ff3fe60806040525f80fdfea26469706673582212203d2b8fa626d74f633beb6a52859a3f42404e033fe939ebaa8c3224ddde23157b64736f6c63430008160033";
// Arrays
// can be made with different value data-types
// you must specify the type of array
bool[5] statuses = [true, false, true, true, true];
uint8[15] OnlyPosNumbers = [1,2,3,4,5,255,255,255,255,255,255];
int16[] negAndPosNumbers = [-12839,29,29990];
address[] addressList = [0x5B38Da6a701c568545dCfcB03FcB875f56beddC4,0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2,0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2];
// Structs
// making our own type of a mix of different datatypes
//
struct Person {
string name;
uint8 age;
}
Person public person; // actual variable
// Person person = Person("j",10);
// Enums - enumerations
enum FoodStatus {Eaten, NotEaten}
FoodStatus foodStatus = FoodStatus.NotEaten;
// MAPPINGS
// num[0]; // 1
// nameOfMapping[firstItemOfTheMapping];// return the corresponding second item of the mapping
// 1 dimensional mapping
mapping(address => uint224) public balance;
// balance[0x5B38Da6a701c568545dCfcB03FcB875f56beddC4]// return uint224 number
// 2 dimensional mapping
mapping(string => mapping(string => uint128)) public carDetails;
// carDetails["BMW"]["XYZ"]// return uint128 number
function update() external {
addressList.push(0x5B38Da6a701c568545dCfcB03FcB875f56beddC4);
statuses[0] = false;
balance[0x5B38Da6a701c568545dCfcB03FcB875f56beddC4] = 10;
person = Person({
name: "j",
age: 10
}); // actual variable
person.age = 255;
person.name = "Emma";
// local
bytes7 nnnn = 0xb0bef3540f44ff;
balance[0x5B38Da6a701c568545dCfcB03FcB875f56beddC4] = 10000;
carDetails["BMW"]["XYZ"] = 2023;
}
// function name(params) {
// uint a = 10; local var
// code
// }
}
/*
Basic file structure of smart contracts
*/
// high level language (solidity) -> low level language (bytecode)
/*
An example of a bytecode, generated from a solidity high level code
608060405260015f60016101000a81548160ff021916908315150217905550600a6002557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec6003556014600455735b38da6a701c568545dcfcb03fcb875f56beddc460055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600781526020017f4a65737365726300000000000000000000000000000000000000000000000000815250600690816100e49190610330565b503480156100f0575f80fd5b506103ff565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061017157607f821691505b6020821081036101845761018361012d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026101e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826101ab565b6101f086836101ab565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61023461022f61022a84610208565b610211565b610208565b9050919050565b5f819050919050565b61024d8361021a565b6102616102598261023b565b8484546101b7565b825550505050565b5f90565b610275610269565b610280818484610244565b505050565b5b818110156102a3576102985f8261026d565b600181019050610286565b5050565b601f8211156102e8576102b98161018a565b6102c28461019c565b810160208510156102d1578190505b6102e56102dd8561019c565b830182610285565b50505b505050565b5f82821c905092915050565b5f6103085f19846008026102ed565b1980831691505092915050565b5f61032083836102f9565b9150826002028217905092915050565b610339826100f6565b67ffffffffffffffff81111561035257610351610100565b5b61035c825461015a565b6103678282856102a7565b5f60209050601f831160018114610398575f8415610386578287015190505b6103908582610315565b8655506103f7565b601f1984166103a68661018a565b5f5b828110156103cd578489015182556001820191506020850194506020810190506103a8565b868310156103ea57848901516103e6601f8916826102f9565b8355505b6001600288020188555050505b505050505050565b603e8061040b5f395ff3fe60806040525f80fdfea26469706673582212203d2b8fa626d74f633beb6a52859a3f42404e033fe939ebaa8c3224ddde23157b64736f6c63430008160033
Bytecode (compiled smart contracts) runs on the Ethereum virtual machine (EVM).
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment