Welcome! This is my personal blog about Web technologies, software development, open source and other related topics
The ideas and opinions expressed here are solely mine and don't represent those of others, either individuals or companies.The code snippets or references to software products or analogous are to be used without any warranty of any kind. If you enjoy the content, feel free to share it and re-use it as long as you provide a link to the original post.
Decentralised – Having no single point of authority
Transperancy and Flexibility
Speed and Effeciency
Security and Immutability
Removal of counterparty risk
Trust minimised agreements
Hybrid smart conrtract with Chain Link (Oracle)
Terms and Abbrevations used in Blockchain-
DAO’s – Decentralised Autonomous Organization’s
Testnet – are free and for testing smart contracts
Mainnet – cost money and are considered “live”
Faucet – is and application that gives us free test token, like free test Rinkeby Ethereum
Block Explorer – an application that allows us to “view” transactions that happen on a blockchain.
Gas – is a unit of computational measure. The more computation a transaction uses the more “gas” you have to pay for.
Every transaction that happens on-chain pays a “gas fee” to node operators.
The amount of “gas” used and how much you pay depends on how “computationally expensive” your transaction is.
Sending ETH to 1 address would be “cheaper” than sending ETH to 1,000 addresses.
Gwei (giga-wei) – denomination or a small unit of Ether 1 Ether is 1 billion Gwei. It is used to measure cost of transaction i.e. used in the Ethereum network to but and sell goods and services.
Gas – Measure of computation use
Gas Price – How much it costs per unit of gas.
Gas Limit – Max amount of gas in a transaction
Transaction Fee – Gas used X Gas Price i.e. 21,000 gas @ 1GWEI per gas =21,000 GWEI
Gas Price of Ehtereum fluctuates based on the demand of the blockchain. More perople using or want to make transactions, the higher the gas price and therefore the higher the transaction fees.
Gnesis Block – First block in a blockchain
Hash – Unique fixed length string to identify a piece of data
Hash Algorithm – A function or algorithm that computes data into a unique hash.
Mining – The precess of finding the “solution” to the blockchain “problem”. Node get paid for mining blocks.
Block – A list of transactions mined together
Nonce – A “number used once” to find the “solution” to the blockchain problem. It’s also used to define the transaction number for an account/address.
Public Key – Is derived from your private key. Anyone can “see” it, and user it, and user it to verify that a transaction came from you.
Private key – Only know to the keyholder, its used to “sign” transactions.
Elliptic Curve Digital Signature Algorithm (ECDSA) – generates public key using private key.
Signing Transactions – A “one way” process. Someone with a private key signs a transaction by their private key being hashed with their transaction data. Anyone can then verify this new transaction hash with your public key.
Node: Single instance in a decentralized network. Anyone can join the network. Blockchains are resilient. Blockchain nodes keep lists of the transactions that occur. They are immutable- nothing can corrupt them.
—Consensus – is the mechanism used to agree on the state of a blockchain.
Broken into 2 :-
— Chain Selection –
— Sybil Resistance – Proof of work. Block Author, defends on fake blockchains
— — PoW – Minners. Uses lot of electricity and is hence costly.
-Transaction Fees and Block Reward.- compete each other to find the answer to the problems. Whoever finds first get the transaction fees.
Sybil Attack – creates fake accounts to influence the network
51% attack –
Longest Chain Rule
– — PoS — Validators – nodes put up collateral as a sybil resistance mechanism. Uses less energy. Slightly less decentralised.
ABI– ApplicationBinary Interface- tells Solidity how it can interact with another contract. What functions can be called from the contract. Interfaces compile down to ABI.
Class Methods are like Class Varaibles which works on Class but not on object level.
So this methods are bound to class and not object. See class varaibles here
Clas Methods are decorated with @classmethod attribute to the method in class.
This method can be called without creating instance of the class.
See below example definition and usage of class method.
In the above example get_instance_counter() method is decorated as @classmethod and a cls variable is passed. This holdsthe class reference for which the method is called.
The constructor works normal with __init__ method and updates calss variable counter increments the counter when an instance is created. This class variable accessed in the get_instance_counter() method.
You can also provision Python class to have multiple constructor with class method. See here – How to add multiple constructor to Python class?
Create a seperate image for each application. Containers can talk to each other and can form a single large application and helps to scale each application
Don’t sotre data in Images
Images are read-only layer. When a container or image is deleted the data is lost
Use Cache Busting strategy
Install the repositories and packages together. As the docker file ises layered architecture having a seperate command for updating repositories and packages may not gurantee the repsoitories will be upto date and may result in dependency issue.
Use Version Pinning
When installing packages specifiy which version you want to install as everytime the image is build it will install the latest package where a application may not be compatible. Version pinning will always ensure the image will have specific version which your application supports.
Create slim images
This will help pull the images from which ever repository you are using quickly
Install only necessary or required packages
This will make image slim or with minimal packages and no unwanted packages are installed so every time image is build with minimal packages the build is fast and light weight. Also the containers created from such images are light weight and fast.
Maintain different images for different environements
Development images may contain debug tools and temprorary files required for debugging and bulding your application. However there tools are not required for production images. Hence remvoe any temporary files/folder and such tools for prodcution by creating a seperate image for different environments.
Use multi-stage builds to create images
Multi-stage build helps to or uses multiple FROM statements where each FROM instruction can use a different base, and each of them begins with new stage of the build and everything that is required for application is in the final image leaving behind unwanted files. This will avoid executing any script that was done traditionaly.
Exclude any unwanted files and folders using .dockerignore file
Use .dockerignore to exlcude any unwanted files and folders e.g.:- temp folder etc. this make the image lighter.
Use CMD instructions to run software in Image
Use CMD instructions to run the software contained in your image along with arguments. CMD should be used in JSON format that is the command and parameters should be seperated by comma.
Minimize build times
By avoiding to send unwanted files to the build context using .dockerengine
At times if you dont want to always pull the image from image registry which takes time to pull if the image’s are heavy, it makes sense to save the image and use it offline. This avoids to always pull the image from the registry.
Save the image once into tar file and reuse the images.
To Save image use follwoing command
First pull the image from repository
docker pull httpd
docker image save httpd -o httpdimage.tar
Get the image from the tar file instead pulling it from the registry