Learn Solidity - Build Decentralized Application in Ethereum

Learn Solidity: Inheriting Smart Contracts

In this post, we will learn how to inherit & extend existing smart contracts in Solidity Language. [pastacode lang=”javascript” manual=”pragma%20solidity%200.4.8%3B%0A%0A%2F%2F%20Solidity%20supports%20multiple%20inheritance%20by%20copying%20code%20including%20polymorphism.%0A%0A%2F%2F%20All%20function%20calls%20are%20virtual%2C%20which%20means%20that%20the%20most%20derived%20function%20is%20called%2C%20%0A%2F%2F%20except%20when%20the%20contract%20name%20is%20explicitly%20given.%0A%0A%2F%2F%20Even%20if%20a%20contract%20inherits%20from%20multiple%20other%20contracts%2C%20only%20a%20single%20contract%20%0A%2F%2F%20is%20created%20on%20the%20blockchain%2C%20the%20code%20from%20the%20base%20contracts%20is%20always%20copied%20into%20the%20final%20contract.%0A%0A%2F%2F%20In%20general%20inheritance%20system%20in%20solidity%20is%20very%20similar%20to%20Python%E2%80%99s%2C%20%0A%2F%2F%20especially%20concerning%20multiple%20inheritance.%0A%0A%2F%2F%20Lets%20checkout%20one%20example%0A%0A%2F%2F%20We%20will%20create%20a%20simple%20base%20class%20first%0Acontract%20owned%20%7B%0A%20%20%20%20function%20owned()%20%7B%20owner%20%3D%20msg.sender%3B%20%7D%0A%20%20%20%20address%20owner%3B%0A%7D%0A%0A%2F%2F%20Now%20we%20can%20extende%20the%20owned%20using%20is%20keyword%20like%20this%0Acontract%20mortal%20is%20owned%20%7B%0A%0A%09%2F%2F%20here%20kill%20will%20have%20the%20access%20of%20owner%20the%20variable%20%0A%09%2F%2F%20which%20is%20available%20in%20the%20owned%20contract%0A%09%2F%2F%20please%20note%20that%20owned%20contract’s%20constructor%20will%20be%20%0A%09%2F%2F%20executed%20at%20the%20time%20of%20mortal’s%20initialization%0A%20%20%20%20function%20kill()%20%7B%0A%20%20%20%20%20%20%20%20selfdestruct(owner)%3B%0A%20%20%20%20%7D%0A%7D%0A%0A%2F%2F%20Multiple%20inheritance%20is%20also%20possible.%20Note%20that%20%22owned%22%20is%0A%2F%2F%20also%20a%20base%20class%20of%20%22mortal%22.%0A%2F%2F%20in%20such%20cases%20the%20order%20of%20inheritance%20is%20important%20to%20avoid%20the%20%0A%2F%2F%20Diamond%20problem%20(which%20is%20know%20in%20multiple%20inheritance)%0A%2F%2F%20Let’s%20take%20an%20example.%0A%0A%0Acontract%20User%20is%20mortal%2C%20owned%20%7B%0A%0A%20%20%20%20string%20public%20UserName%3B%0A%0A%20%20%20%20function%20User(string%20_name)%7B%0A%20%20%20%20%20%20%20%20UserName%20%3D%20_name%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%20here%20User%20inherits%20both%20the%20cntracts%20owned%20%26%20mortal%20which%20is%20resulting%20in%20diamond%20problem%0A%20%20%20%20%2F%2F%20Changing%20the%20order%20of%20inheritance%20might%20resolve%20the%20issue%20of%20this%20diamond%20problem.%0A%20%20%20%20%2F%2F%20The%20reason%20for%20this%20is%20that%20%22User%22%20requests%20%22owned%22%20to%20override%20%0A%20%20%20%20%2F%2F%20%22mortal%22%20(by%20specifying%20mortal%2C%20owned%20in%20this%20order)%2C%20but%20%22mortal%22%20itself%20%0A%20%20%20%20%2F%2F%20requests%20to%20override%20%22owned%22%2C%20which%20is%20a%20contradiction%20that%20cannot%20be%20resolved.%0A%20%20%20%20%2F%2F%20Here%20reverting%20the%20order%20will%20solve%20this%20problem%0A%20%20%20%20%2F%2F%20A%20simple%20rule%20to%20remember%20is%20to%20specify%20the%20base%20classes%20%0A%20%20%20%20%2F%2F%20in%20the%20order%20from%20%E2%80%9Cmost%20base-like%E2%80%9D%20to%20%E2%80%9Cmost%20derived%E2%80%9D.%0A%7D%0A%0A%0A%0A” message=”” highlight=”” provider=”manual”/] [otw_shortcode_button href=”https://www.toshblocks.com/solidity/creating-contracts-via-new-operator/” size=”large” icon_type=”general foundicon-left-arrow” icon_position=”left” shape=”radius”…
Read More
Learn Solidity - Build Decentralized Application in Ethereum

Learn Solidity: Creating Contracts via “new” Operator

In this post, we will learn how to create or instantiate a new contract using the “new” keyword in Solidity Language. [otw_shortcode_button href=”https://www.toshblocks.com/solidity/abstract-contracts-solidity/” size=”large” icon_type=”general foundicon-left-arrow” icon_position=”left” shape=”radius” color_class=”otw-blue”]Previous: Abstract Contract in…
Read More
Learn Solidity - Build Decentralized Application in Ethereum

Learn Solidity: Abstract Contracts in Solidity

In this post, we will learn what are abstract contracts & how to use them in Solidity Language. [pastacode lang=”javascript” manual=”pragma%20solidity%200.4.8%3B%0A%0A%2F%2F%20These%20abstract%20contracts%20are%20only%20provided%20to%20make%20the%0A%2F%2F%20interface%20known%20to%20the%20compiler.%20Note%20the%20function%0A%2F%2F%20without%20body.%20If%20a%20contract%20does%20not%20implement%20all%0A%2F%2F%20functions%20it%20can%20only%20be%20used%20as%20an%20interface.%0A%0A%2F%2F%20Let%20me%20write%20an%20abstract%20contract%20with%20a%20single%20function%20and%20then%20extend%20it%20%0A%2F%2F%20in%20the%20new%20contract%20and%20then%20override%20it%20there.%0Acontract%20Feline%20%7B%0A%09%2F%2F%20This%20is%20how%20we%20write%20the%20abstract%20contract%20%0A%20%20%20%20function%20utterance()%20returns%20(bytes32)%3B%0A%7D%0A%0A%2F%2F%20inherit%20the%20contract%20in%20cat%20and%20then%20override%20the%20function%20utterance%20with%20some%20full%20definition%0Acontract%20Cat%20is%20Feline%20%7B%0A%20%20%20%20function%20utterance()%20returns%20(bytes32)%20%7B%20return%20%22miaow%22%3B%20%7D%0A%7D%0A%0A%0A” message=”” highlight=”” provider=”manual”/] [otw_shortcode_button href=”https://www.toshblocks.com/solidity/fallback-function-solidity/” size=”large” icon_type=”general foundicon-left-arrow” icon_position=”left”…
Read More
Learn Solidity - Build Decentralized Application in Ethereum

Fallback Function in Solidity

In this post, we will learn what is fallback function & how to use them in Solidity Language. [pastacode lang=”javascript” manual=”pragma%20solidity%200.4.8%3B%20%0A%0A%2F*%0A*%20%40title%20Example%20for%20Solidity%20Course%0A*%20%40author%20Ethereum%20Community%0A*%20%40notice%20Example%20for%20the%20Solidity%20Course%0A*%2F%0A%0Acontract%20Test%20%7B%0A%20%20%20%20%2F%2F%20This%20function%20is%20called%20for%20all%20messages%20sent%20to%0A%20%20%20%20%2F%2F%20this%20contract%20(there%20is%20no%20other%20function).%0A%20%20%20%20%2F%2F%20Sending%20Ether%20to%20this%20contract%20will%20cause%20an%20exception%2C%0A%20%20%20%20%2F%2F%20because%20the%20fallback%20function%20does%20not%20have%20the%20%22payable%22%0A%20%20%20%20%2F%2F%20modifier.%0A%20%20%20%20function()%20%7B%20x%20%3D%201%3B%20%7D%0A%20%20%20%20uint%20x%3B%0A%7D%0A%0A%0A%2F%2F%20This%20contract%20keeps%20all%20Ether%20sent%20to%20it%20with%20no%20way%0A%2F%2F%20to%20get%20it%20back.%0Acontract%20Sink%20%7B%0A%20%20%20%20%2F%2Fbelow%20line%20will%20make%20the%20default%20function%20payable%20by%20adding%20a%20payable%20modifier%20like%20this%0A%20%20%20%20function()%20payable%20%7B%20%7D%0A%7D%0A%0A%0Acontract%20Caller%20%7B%0A%20%20%20%20function%20callTest(Test%20test)%20%7B%0A%20%20%20%20%20%20%20%20test.call(0xabcdef01)%3B%20%2F%2F%20function%20hash%20does%20not%20exist%0A%20%20%20%20%20%20%20%20%2F%2F%20results%20in%20test.x%20becoming%20%3D%3D%201.%0A%20%20%20%20%7D%0A%7D” message=”” highlight=”” provider=”manual”/] [otw_shortcode_button href=”https://www.toshblocks.com/solidity/function-modifiers-solidity-how-they-works/” size=”large” icon_type=”general foundicon-left-arrow” icon_position=”left”…
Read More
Learn Solidity - Build Decentralized Application in Ethereum

Learn Solidity: Function Modifiers & How They Works

In this post, we will understand what are function modifiers & how to use them in Solidity Language. [pastacode lang=”javascript” manual=”pragma%20solidity%200.4.8%3B%20%0A%0A%2F*%0A*%20%40title%20Learn%20Solidity%3A%20Function%20Modifiers%20in%20Solidity%0A*%20%40author%20Toshendra%20Sharma%0A*%20%40notice%20Example%20for%20the%20Learn%20Solidity%0A*%2F%0A%0A%2F%2F%20Let’s%20talk%20about%20one%20of%20the%20most%20useful%20feature%20known%20as%20%22function%20modifiers%22%20in%20solidity%0A%2F%2F%20Modifiers%20can%20be%20used%20to%20easily%20change%20the%20behaviour%20of%20functions%2C%20%0A%2F%2F%20for%20example%20they%20can%20be%20used%20to%20to%20automatically%20check%20a%20condition%20prior%20to%20executing%20the%20function.%20%0A%2F%2F%20They%20are%20inheritable%20properties%20of%20contracts%20and%20may%20be%20overridden%20by%20derived%20contracts.%0A%0A%2F%2F%20one%20example%20use%20case%20of%20function%20modifiers%20would%20be%20if%20we%20want%20to%20call%20the%20killContract%20function%20%0A%2F%2F%20through%20only%20via%20owner%2Fcreator%20of%20the%20contract.%0A%0A%0A%0Acontract%20FunctionModifiers%20%7B%0A%0A%09address%20public%20creator%3B%0A%20%20%20%20%2F%2F%20Define%20consutruct%20here%0A%20%20%20%20function%20FunctionModifiers()%20%7B%0A%20%20%20%20%20%20%20%2F%2F%20Initialize%20state%20variables%20here%0A%20%20%20%20%20%20%20creator%20%3D%20msg.sender%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2Fthis%20is%20how%20we%20define%20the%20modifiers%0A%20%20%20%20modifier%20onlyCreator()%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20if%20a%20condition%20is%20not%20met%20then%20throw%20an%20exception%0A%20%20%20%20%20%20%20%20if%20(msg.sender%20!%3D%20creator)%20throw%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20or%20else%20just%20continue%20executing%20the%20function%0A%20%20%20%20%20%20%20%20_%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20this%20is%20how%20we%20add%20a%20modifier%20to%20the%20function%20%0A%20%20%20%20%2F%2F%20there%20can%20be%20zero%20of%20more%20number%20of%20modifiers%0A%20%20%20%20function%20kill()%20onlyCreator%20%7B%20%0A%20%20%20%20%09selfdestruct(creator)%3B%0A%20%20%20%20%7D%0A%0A%7D” message=”” highlight=”” provider=”manual”/] [otw_shortcode_button href=”https://www.toshblocks.com/solidity/function-calls-return-types-solidity/” size=”large” icon_type=”general foundicon-left-arrow” icon_position=”left”…
Read More
Learn Solidity - Build Decentralized Application in Ethereum

Learn Solidity: Function Calls & Return Types in Solidity

In this post, we will understand the how function calls work & how to specify their return types in Solidity Language. [pastacode lang=”javascript” manual=”pragma%20solidity%200.4.8%3B%20%0A%0A%2F*%0A*%20%40title%20Learn%20Solidity%3A%20Function%20Calls%20%26%20Return%20Types%20in%20Solidity%0A*%20%40author%20Toshendra%20Sharma%0A*%20%40notice%20Example%20for%20the%20Learn%20Solidity%20Series%20on%20Toshblocks%0A*%2F%0A%0A%2F%2F%20Let’s%20learn%20how%20to%20make%20function%20calls%20in%20Solidity%0A%0A%0A%0Acontract%20FunctionCall%20%7B%0A%0A%09%2F%2F%20Constructor%20calls%20are%20also%20a%20function%20calls%20and%20are%20defined%20like%20this%0A%09%0A%09function%20FunctionCall(uint%20param1)%20%7B%0A%09%20%20%20%2F%2F%20Initialize%20state%20variables%20here%0A%09%7D%0A%0A%09%2F%2F%20you%20can%20create%20a%20contract%20object%20with%20a%20name%20%26%20then%20use%20it%20inside%20the%20function%20calls%20like%20this%0A%09Miner%20m%3B%0A%0A%0A%09function%20setMiner(address%20addr)%20%7B%20%0A%09%09m%20%3D%20Miner(addr)%3B%20%2F%2F%20type%20casted%20the%20addr%20to%20Miner%20type%20and%20stored%20in%20m%0A%09%7D%0A%09%2F%2Ffunction%20setMiner(Miner%20_m)%20%7B%20m%20%3D%20_m%3B%20%7D%20is%20also%20correct%0A%0A%09%2F%2F%20Now%20you%20can%20use%20the%20Miner’s%20function%20which%20is%20info%20to%20sent%20%0A%09%2F%2F%20some%20ether%20with%20optionally%20specifying%20the%20gas%20like%20this%0A%09function%20callMinerInfo()%20%7B%20m.info.value(10).gas(800)()%3B%20%7D%0A%0A%0A%09%2F%2Ffunction%20can%20also%20be%20called%20as%20json%20object%20as%20parameters%0A%09%2F%2F%20below%20function%20can%20be%20called%20by%20using%20the%20json%20object%20as%20shown%20in%20demo%20function%20below%0A%09function%20someFunction(uint%20key%2C%20uint%20value)%20%7B%0A%09%09%2F%2F%20Do%20something%0A%09%7D%0A%0A%09function%20demoFunction()%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20named%20arguments%0A%20%20%20%20%20%20%20%20someFunction(%7Bvalue%3A%202%2C%20key%3A%203%7D)%3B%0A%20%20%20%20%7D%0A%0A%0A%20%20%20%20%2F%2Falso%20note%20that%20variable%20names%20are%20optional%20in%20parameters%20%26%20in%20returns%0A%20%20%20%20function%20someFunction2(uint%20key%2C%20uint)%20returns%20(uint)%7B%20%0A%20%20%20%20%09%2F%2F%20Do%20something%0A%20%20%20%20%09reutrn%20key%3B%0A%20%20%20%20%7D%0A%0A%09%0A%7D%0A%0Acontract%20Miner%7B%0A%0A%09%0A%09%2F%2FThe%20modifier%20payable%20has%20to%20be%20used%20for%20info%2C%20%0A%09%2F%2F%20because%20otherwise%2C%20we%20would%20not%20be%20able%20to%20%0A%09%2F%2F%20send%20Ether%20to%20it%20in%20the%20call%20m.info.value(10).gas(800)().%0A%09function%20info()%20payable%20returns%20(uint%20ret)%20%7B%20return%2042%3B%20%7D%0A%7D” message=”” highlight=”” provider=”manual”/] [otw_shortcode_button href=”https://www.toshblocks.com/solidity/input-output-parameters-functions/” size=”large”…
Read More
Learn Solidity - Build Decentralized Application in Ethereum

Learn Solidity: Input and Output Parameters of Functions

In this post, we will understand the how Input & output Parameters can be defined in Solidity Language. [pastacode lang=”javascript” manual=”pragma%20solidity%200.4.8%3B%20%0A%0A%2F*%0A*%20%40title%20An%20Example%0A*%20%40author%20Toshendra%20Sharma%0A*%20%40notice%20Example%20for%20the%20Solidity%20Course%0A*%2F%0A%0A%2F%2F%20As%20in%20Javascript%2C%20functions%20may%20take%20parameters%20as%20input%3B%20%0A%2F%2F%20unlike%20in%20Javascript%20and%20C%2C%20they%20may%20also%20return%20arbitrary%20number%20of%20parameters%20as%20output.%0A%0A%2F%2F%20The%20input%20parameters%20are%20declared%20the%20same%20way%20as%20variables%20are.%20%0A%2F%2F%20As%20an%20exception%2C%20unused%20parameters%20can%20omit%20the%20variable%20name.%20%0A%0A%0Acontract%20InputAndOutputParameters%20%7B%0A%0A%20%20%20%20%0A%20%20%20%20uint%20public%20constructorInput1%3B%0A%20%20%20%20address%20public%20constructorInput2%3B%0A%20%20%20%20uint%20public%20sum%3B%0A%20%20%20%20uint%20public%20product%3B%0A%20%20%20%20uint%20public%20multiplyByThreeValue%3B%0A%0A%0A%20%20%20%20%2F%2F%20For%20example%2C%20suppose%20we%20want%20our%20contract%20to%20accept%20%20%0A%20%20%20%20%2F%2Ftwo%20parameters%2C%20we%20would%20write%20something%20like%3A%0A%20%20%20%20function%20InputAndOutputParameters(uint%20_inputParam1%2C%20address%20_inputParam2)%20%7B%0A%20%20%20%20%20%20%20%2F%2F%20Initialize%20state%20variables%20here%0A%20%20%20%20%20%20%20constructorInput1%20%3D%20_inputParam1%3B%0A%20%20%20%20%20%20%20constructorInput2%20%3D%20_inputParam2%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20The%20output%20parameters%20can%20be%20declared%20with%20the%20same%20syntax%20after%20the%20returns%20keyword.%20%0A%20%20%20%20%2F%2F%20For%20example%2C%20suppose%20we%20wished%20to%20return%20%20one%20value%3A%20then%20we%20would%20write%20this%3A%0A%0A%20%20%20%20function%20multiplyByThree(uint%20_inputParam1)%20returns%20(uint%20m)%7B%0A%20%20%20%20%20%20%20%20multiplyByThreeValue%20%3D%20_inputParam1%20*%203%3B%0A%20%20%20%20%20%20%20%20m%20%3D%20multiplyByThreeValue%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20Let’s%20say%20we%20want%20to%20return%20two%20values%20the%20we%20would%20write%20something%20like%20this%0A%0A%20%20%20%20function%20sumAndProduct1(uint%20_inputParam1%2C%20uint%20_inputParam2)%20returns%20(uint%20s%2C%20uint%20p)%7B%0A%20%20%20%20%20%20%20%20sum%20%3D%20_inputParam1%20%2B%20_inputParam2%3B%0A%20%20%20%20%20%20%20%20product%20%3D%20_inputParam1%20*%20_inputParam2%3B%0A%20%20%20%20%20%20%20%20s%20%3D%20sum%3B%0A%20%20%20%20%20%20%20%20p%20%3D%20product%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20please%20note%20that%20variables%20name%20can%20be%20ommitted%20in%20returns%20as%20well%20as%20in%20function%20call.%0A%20%20%20%20function%20sumAndProduct2(uint%20_inputParam1%2C%20uint%20_inputParam2)%20returns%20(uint%2C%20uint)%7B%0A%20%20%20%20%20%20%20%20sum%20%3D%20_inputParam1%20%2B%20_inputParam2%3B%0A%20%20%20%20%20%20%20%20product%20%3D%20_inputParam1%20*%20_inputParam2%3B%0A%20%20%20%20%20%20%20%20return%20(sum%2C%20product)%3B%0A%20%20%20%20%7D%0A%0A%7D” message=”” highlight=”” provider=”manual”/] [otw_shortcode_button href=”https://www.toshblocks.com/solidity/scoping-declarations-variables-solidity/” size=”large” icon_type=”general foundicon-left-arrow” icon_position=”left”…
Read More
Learn Solidity - Build Decentralized Application in Ethereum

Learn Solidity: Scoping and Declarations in Solidity

In this post, we will understand the scoping & declaration of variables in Solidity Language. [pastacode lang=”javascript” manual=”pragma%20solidity%20%5E0.4.0%3B%0A%0A%2F%2F%20A%20variable%20which%20is%20declared%20will%20have%20an%20initial%20default%20value%20whose%20byte-representation%20%0A%2F%2F%20is%20all%20zeros.%20The%20%E2%80%9Cdefault%20values%E2%80%9D%20of%20variables%20are%20the%20typical%20%E2%80%9Czero-state%E2%80%9D%20of%20whatever%20%0A%2F%2F%20the%20type%20is.%20For%20example%2C%20the%20default%20value%20for%20a%20bool%20is%20false.%20The%20default%20value%20for%20%0A%2F%2F%20the%20uint%20or%20int%20types%20is%200.%20For%20statically-sized%20arrays%20and%20bytes1%20to%20bytes32%2C%20each%20%0A%2F%2F%20individual%20element%20will%20be%20initialized%20to%20the%20default%20value%20corresponding%20to%20its%20type.%20%0A%2F%2F%20Finally%2C%20for%20dynamically-sized%20arrays%2C%20bytes%20and%20string%2C%20the%20default%20value%20is%20an%20%0A%2F%2F%20empty%20array%20or%20string.%0A%0A%2F%2F%20A%20variable%20declared%20anywhere%20within%20a%20function%20will%20be%20in%20scope%20for%20the%20entire%20function%2C%20%0A%2F%2F%20regardless%20of%20where%20it%20is%20declared.%20This%20happens%20because%20Solidity%20inherits%20its%20scoping%20%0A%2F%2F%20rules%20from%20JavaScript.%20This%20is%20in%20contrast%20to%20many%20languages%20where%20variables%20are%20only%20%0A%2F%2F%20scoped%20where%20they%20are%20declared%20until%20the%20end%20of%20the%20semantic%20block.%20As%20a%20result%2C%20%0A%2F%2F%20the%20following%20code%20is%20illegal%20and%20cause%20the%20compiler%20to%20throw%20an%20error%2C%20Identifier%20already%20declared%3A%0A%0Acontract%20ScopingErrors%20%7B%0A%20%20%20%20function%20scoping()%20%7B%0A%20%20%20%20%20%20%20%20uint%20i%20%3D%200%3B%0A%0A%20%20%20%20%20%20%20%20while%20(i%2B%2B%20%3C%201)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint%20same1%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20while%20(i%2B%2B%20%3C%202)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint%20same1%20%3D%200%3B%2F%2F%20Illegal%2C%20second%20declaration%20of%20same1%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20minimalScoping()%20%7B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint%20same2%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint%20same2%20%3D%200%3B%2F%2F%20Illegal%2C%20second%20declaration%20of%20same2%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20forLoopScoping()%20%7B%0A%20%20%20%20%20%20%20%20for%20(uint%20same3%20%3D%200%3B%20same3%20%3C%201%3B%20same3%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20for%20(uint%20same3%20%3D%200%3B%20same3%20%3C%201%3B%20same3%2B%2B)%20%7B%2F%2F%20Illegal%2C%20second%20declaration%20of%20same3%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20%20%20function%20foo()%20returns%20(uint)%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20baz%20is%20implicitly%20initialized%20as%200%0A%20%20%20%20%20%20%20%20uint%20bar%20%3D%205%3B%0A%20%20%20%20%20%20%20%20if%20(true)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20bar%20%2B%3D%20baz%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uint%20baz%20%3D%2010%3B%2F%2F%20never%20executes%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20bar%3B%2F%2F%20returns%205%0A%20%20%20%20%7D%0A%7D” message=”” highlight=”” provider=”manual”/] [otw_shortcode_button href=”https://www.toshblocks.com/solidity/control-structure-solidity-programming-language/” size=”large” icon_type=”general foundicon-left-arrow” icon_position=”left” shape=”radius” color_class=”otw-blue”]Previous: Control…
Read More
Learn Solidity - Build Decentralized Application in Ethereum

Learn Solidity: Control Structure (if-else, for, while, Do-While)

In this post, we will understand the Control Structure (if-else, for, while, Do-While) in Solidity Language. [pastacode lang=”javascript” manual=”pragma%20solidity%200.4.8%3B%0A%0A%2F%2F%20Solidity%20follows%20the%20same%20syntax%20of%20controle%20structures%20as%20Java%20script%20or%20C.%0A%2F%2F%20hence%20Most%20of%20the%20control%20structures%20from%20JavaScript%20are%20available%20in%20Solidity%20%0A%2F%2F%20except%20for%20switch%20and%20goto.%20So%20there%20is%3A%20if%2C%20else%2C%20while%2C%20do%2C%20for%2C%20break%2C%20continue%2C%20%0A%2F%2F%20return%2C%20%3F%20%3A%2C%20with%20the%20usual%20semantics%20known%20from%20C%20or%20JavaScript.%0A%0A%2F%2F%20Let’s%20quickly%20go%20through%20ther%20syntax%20in%20this%20lecture.%0A%0A%0Acontract%20ControlStructure%20%7B%0A%20%20%20%20%2F*%0A%20%20%20%20*%20%40title%20A%20Simple%20Example%0A%20%20%20%20*%20%40author%20Toshendra%20Sharma%0A%20%20%20%20*%20%40notice%20Example%20for%20the%20Solidity%20Course%0A%20%20%20%20*%20%40dev%20This%20is%20only%20for%20demo%20the%20simple%20Coin%20example%0A%20%20%20%20*%20%0A%20%20%20%20*%2F%0A%20%20%20%20address%20public%20a%3B%0A%0A%20%20%20%20function%20ControlStructure(uint%20input1)%20%7B%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20if-else%20can%20be%20used%20like%20this%0A%20%20%20%20%20%20%20%20if(input1%20%3D%3D%202)%0A%20%20%20%20%20%20%20%20%20%20%20%20a%20%3D%201%3B%0A%20%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20%20a%20%3D%200%3B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20while%20can%20be%20used%20like%20this%20%20%20%20%0A%20%20%20%20%20%20%20%20while(input1%20%3E%3D%200)%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(input1%20%3D%3D%205)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20input1%20%3D%20input1%20-%201%3B%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20a%2B%2B%3B%0A%20%20%20%20%20%20%20%20%7D%20%0A%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20for%20loop%20can%20be%20used%20like%20this%0A%20%20%20%20%20%20%20%20for(uint%20i%3D0%3B%20i%3C%3D50%3B%20i%2B%2B)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20a%2B%2B%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if(a%20%3D%3D%204)%20break%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20do%20while%20can%20be%20used%20like%20this%0A%20%20%20%20%20%20%20%20do%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20a–%3B%0A%20%20%20%20%20%20%20%20%7D%20(while%20a%3E0)%3B%0A%0A%20%20%20%20%20%20%20%20%2F%2F%20Conditional%20Operator%20can%20be%20used%20like%20this%0A%20%20%20%20%20%20%20%20bool%20isTrue%20%3D%20(a%20%3D%3D%201)%3F%20true%3A%20false%3B%0A%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20will%20show%20an%20error%20because%20%0A%20%20%20%20%20%20%20%20%2F%2Fthere%20is%20no%20type%20conversion%20from%20non-boolean%20to%20boolean%20%20%20%0A%20%20%20%20%20%20%20%20if%20(1)%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fsome%20work%0A%20%20%20%20%20%20%20%20%7D%0A%0A%0A%0A%20%20%20%20%7D%0A%0A%7D” message=”” highlight=”” provider=”manual”/] [otw_shortcode_button href=”https://www.toshblocks.com/solidity/operators-arithmetic-logical-bitwise/” size=”large” icon_type=”general foundicon-left-arrow” icon_position=”left” shape=”radius” color_class=”otw-blue”]Previous:…
Read More
Learn Solidity - Build Decentralized Application in Ethereum

Learn Solidity: Operators: Arithmetic, Logical & Bitwise Operators

In this post, we will understand the Operators: Arithmetic, Logical & Bitwise Operators in Solidity Language. [pastacode lang=”javascript” manual=”pragma%20solidity%200.4.8%3B%20%0A%0A%2F*%0A*%20%40title%20Learn%20Solidity%3A%20Operators%3A%20Arithmetic%2C%20Logical%20%26%20Bitwise%20Operators%0A*%20%40author%20Toshendra%20Sharma%0A*%20%40notice%20Example%20for%20the%20Learn%20Solidity%20Series%0A*%2F%0A%0A%2F%2F%20Operators%20are%20most%20common%20things%20in%20any%20programming%20language%0A%2F%2F%20lets%20checkout%20the%20different%20types%20of%20perators%20in%20solidity%0A%0Acontract%20Operators%20%7B%0A%0A%20%20%20%20%2F%2F%20Arithmatic%20Operators%0A%20%20%20%20uint%20a%20%3D%2010%3B%0A%20%20%20%20%2F%2F%20%2B%2C%20-%2C%20unary%20-%2C%20unary%20%2B%2C%20*%2C%20%2F%2C%20%25%20(remainder)%2C%20**%20(exponentiation)%0A%20%20%20%20uint%20b%20%3D%202**3%3B%20%2F%2F%20b%20%3D%208%0A%0A%20%20%20%20%2F%2F%20a%2B%2B%20and%20a–%20are%20equivalent%20to%20a%20%2B%3D%201%20%2F%20a%20-%3D%201%20%0A%20%20%20%20%2F%2F%20but%20the%20expression%20itself%20still%20has%20the%20previous%20value%20of%20a.%20%0A%20%20%20%20%2F%2F%20In%20contrast%2C%20–a%20and%20%2B%2Ba%20have%20the%20same%20effect%20on%20a%20but%20return%20the%20value%20after%20the%20change.%0A%20%20%20%20a%20%3D%20a%2B%2B%3B%20%2F%2F%20a%20%3D%2010%0A%20%20%20%20a%20%3D%20%2B%2Ba%3B%20%2F%2F%20a%20%3D%2011%0A%0A%20%20%20%20%2F%2F%20a%20%2B%3D%20e%20is%20equivalent%20to%20a%20%3D%20a%20%2B%20e.%20%0A%20%20%20%20%2F%2F%20The%20operators%20-%3D%2C%20*%3D%2C%20%2F%3D%2C%20%25%3D%2C%20a%20%7C%3D%2C%20%26%3D%20and%20%5E%3D%20are%20defined%20accordingly.%20%0A%20%20%20%20a%20%2B%3D%205%3B%20%2F%2F%20a%20%3D%2011%2B5%20%3D%2016%0A%0A%0A%20%20%20%20%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20Logical%20Operators%0A%20%20%20%20%2F%2F%20!%20(logical%20negation)%0A%20%20%20%20%2F%2F%20%26%26%20(logical%20conjunction%2C%20%E2%80%9Cand%E2%80%9D)%0A%20%20%20%20%2F%2F%20%7C%7C%20(logical%20disjunction%2C%20%E2%80%9Cor%E2%80%9D)%0A%20%20%20%20%2F%2F%20%3D%3D%20(equality)%0A%20%20%20%20%2F%2F%20!%3D%20(inequality)%0A%20%20%20%20bool%20isOwner%3B%0A%20%20%20%20isOwner%20%3D%20isMortal%20%26%26%20hasWriteAccess%3B%0A%20%20%20%20isOwner%20%3D%20true%20%26%26%20false%3B%20%2F%2F%20false%0A%20%20%20%20isOwner%20%3D%20true%20%7C%7C%20false%3B%20%2F%2F%20true%0A%20%20%20%20isOwner%20%3D%20!false%3B%20%2F%2F%20true%0A%20%20%20%20var%20check%20%3D%20(1%20ether%20%3D%3D%201000%20finney)%3B%20%2F%2F%20true%0A%20%20%20%20var%20check%20%3D%20(1%20ether%20!%3D%202000%20finney)%3B%20%2F%2F%20true%0A%0A%20%20%20%20%2F%2F%20Bitwise%20Operators%0A%20%20%20%20%2F%2F%20%26%20Bitwise%20AND%20%0A%20%20%20%20%2F%2F%20%7C%20Bitwise%20OR%20%0A%20%20%20%20%2F%2F%20%5E%20Bitwise%20exclusive%20OR%20%0A%20%20%20%20%2F%2F%20~%20Bbitwise%20negation%0A%20%20%20%20%2F%2F%20%3E%3E%20Bitwise%20right%20shift%0A%20%20%20%20%2F%2F%20%3C%3C%20Bitwise%20left%20shift%0A%20%20%20%20var%20orValue%20%3D%200×02%20%7C%200×01%3B%20%2F%2F%20orValue%20%3D%200×03%0A%20%20%20%20uint%20shiftValue%20%3D%200×01%20%3C%3C%202%3B%20%2F%2F%20shiftValue%20%3D%204%0A%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20Define%20consutruct%20here%0A%20%20%20%20function%20Operators(uint%20initialCoins)%20%7B%0A%20%20%20%20%20%20%20%2F%2F%20Initialize%20state%20variables%20here%0A%20%20%20%20%7D%0A%0A%7D” message=”” highlight=”” provider=”manual”/] [otw_shortcode_button href=”https://www.toshblocks.com/solidity/globally-available-variables-functions/” size=”large” icon_type=”general foundicon-left-arrow” icon_position=”left” shape=”radius” color_class=”otw-blue”]Previous:…
Read More
Learn Solidity - Build Decentralized Application in Ethereum

Learn Solidity: Globally Available Variables & Functions

In this post, we will understand the globally available variables & functions in solidity programming language. [pastacode lang=”javascript” manual=”pragma%20solidity%200.4.8%3B%20%0A%0A%2F*%0A*%20%40title%20Learn%20Solidity%3A%20Globally%20Available%20Variables%20%26%20Functions%20in%20Solidity%20Programming%20Language%0A*%20%40author%20Toshendra%20Sharma%0A*%20%40notice%20Example%20for%20the%20Learn%20Solidity%20Series%0A*%2F%0A%0A%2F%2F%20There%20are%20many%20global%20%0A%0Acontract%20GlobalVariablesAndFunctions%20%7B%0A%0A%20%20%20%20%2F%2F%20msg%20represent%20the%20current%20message%20received%20by%20the%20contracts%20during%20the%20execution.%20%0A%20%20%20%20%2F%2F%20So%20when%20you%20as%20a%20user%20send%20a%20message%20to%20contract%20or%20make%20a%20function%20call%20from%20drop%20down%20menu%20of%20mist%20wallet%0A%20%20%20%20%2F%2F%20you%20catually%20send%20a%20message%20to%20contract%20which%20can%20be%20accessed%20by%20using%20msg%0A%0A%20%20%20%20%2F%2F%20using%20msg.sender%20you%20can%20access%20then%20address%20of%20the%20sender%0A%20%20%20%20msg.sender%3B%0A%0A%20%20%20%20%2F%2F%20amount%20of%20ether%20provided%20to%20this%20contract%20in%20wei%20can%20be%20accessed%20like%20this%0A%20%20%20%20msg.value%3B%20%0A%0A%20%20%20%20%2F%2F%20complete%20call%20data%20in%20bytes%20can%20be%20accessed%20like%20this%0A%20%20%20%20msg.data%3B%20%0A%0A%20%20%20%20%2F%2F%20you%20can%20access%20the%20remaining%20gas%20like%20this%0A%20%20%20%20msg.gas%3B%20%0A%0A%20%20%20%20%2F%2F%20you%20can%20return%20the%20first%20four%20bytes%20of%20the%20call%20data%20like%20this%0A%20%20%20%20msg.sig%3B%20%0A%0A%20%20%20%20%0A%0A%20%20%20%20%2F%2F%20similarly%20tx%20represent%20the%20current%20transaction%20in%20smart%20contract%0A%0A%20%20%20%20%2F%2F%20you%20can%20access%20address%20of%20sender%20of%20the%20transaction%20like%20this%0A%20%20%20%20tx.origin%3B%20%0A%0A%20%20%20%20%2F%2F%20you%20can%20access%20the%20gas%20price%20of%20the%20transaction%0A%20%20%20%20tx.gasprice%3B%20%0A%0A%0A%20%20%20%20%0A%20%20%20%20%2F%2F%20now%20will%20give%20you%20the%20current%20time%20approximately%20in%20unix%20timestamp%20format%0A%20%20%20%20now%3B%20%0A%0A%20%20%20%20%2F%2F%20like%20msg%20%26%20tx%2C%20block%20represent%20the%20information%20about%20the%20current%20Block%0A%0A%20%20%20%20block.number%3B%20%2F%2F%20current%20block%20number%0A%20%20%20%20block.difficulty%3B%20%2F%2F%20current%20block%20difficulty%0A%20%20%20%20block.blockhash(1)%3B%20%2F%2F%20returns%20bytes32%2C%20only%20works%20for%20most%20recent%20256%20blocks%0A%20%20%20%20block.gasLimit()%3B%20%2F%2Freturn%20Gas%20limit%0A%20%20%20%20block.coinbase%20()%3B%20%2F%2F%20return%20current%20block%20miner%E2%80%99s%20address%0A%0A%20%20%20%20%2F%2F%20there%20are%20manu%20athematical%20and%20Cryptographic%20Functions%20as%20well%20%0A%20%20%20%20%2F%2F%20which%20you%20can%20access%20anywhere%20in%20smart%20contracts%0A%20%20%20%20assert(bool%20condition)%3B%20%2F%2F%20throws%20an%20exception%20if%20the%20condition%20is%20not%20met.%0A%20%20%20%20addmod(uint%20x%2C%20uint%20y%2C%20uint%20k)%3B%20%2F%2F%20returns%20(uint)%3B%20%20%2F%2Fcompute%20(x%20%2B%20y)%20%25%20k%20where%20the%20addition%20is%20performed%20with%20arbitrary%20precision%20and%20does%20not%20wrap%20around%20at%202**256.%0A%20%20%20%20mulmod(uint%20x%2C%20uint%20y%2C%20uint%20k)%3B%2F%2F%20returns%20(uint)%3B%20%2F%2F%20compute%20(x%20*%20y)%20%25%20k%20where%20the%20multiplication%20is%20performed%20with%20arbitrary%20precision%20and%20does%20not%20wrap%20around%20at%202**256.%0A%20%20%20%20keccak256(…)%3B%20%2F%2F%20returns%20(bytes32)%3B%20%2F%2F%20compute%20the%20Ethereum-SHA-3%20(Keccak-256)%20hash%20of%20the%20(tightly%20packed)%20arguments%0A%20%20%20%20sha3(…)%3B%20%2F%2F%20returns%20(bytes32)%3B%20%2F%2F%20alias%20to%20keccak256()%0A%20%20%20%20sha256(…)%3B%20%2F%2F%20returns%20(bytes32)%20%2F%2F%20compute%20the%20SHA-256%20hash%20of%20the%20(tightly%20packed)%20arguments%0A%20%20%20%20ripemd160(…)%3B%20%2F%2F%20returns%20(bytes20)%20%2F%2F%20compute%20RIPEMD-160%20hash%20of%20the%20(tightly%20packed)%20arguments%0A%20%20%20%20ecrecover(bytes32%20hash%2C%20uint8%20v%2C%20bytes32%20r%2C%20bytes32%20s)%3B%20%2F%2F%20returns%20(address)%20%2F%2F%20recover%20the%20address%20associated%20with%20the%20public%20key%20from%20elliptic%20curve%20signature%20or%20return%20zero%20on%20error%0A%20%20%20%20revert()%3B%20%2F%2F%20abort%20execution%20and%20revert%20state%20changes%0A%20%20%20%20%2F%2F%20sha3(%22ab%22%2C%20%22c%22)%20%3D%3D%20sha3(%22abc%22)%20%3D%3D%20sha3(0x616263)%20%3D%3D%20sha3(6382179)%20%3D%20sha3(97%2C%2098%2C%2099)%0A%0A%20%20%20%20%2F%2F%20Address%20Related%0A%20%20%20%20%3Caddress%3E.balance%3B%20%2F%2F%20returns%20(uint256)%3B%20%2F%2F%20balance%20of%20the%20Address%20in%20Wei%0A%20%20%20%20%3Caddress%3E.send(uint256%20amount)%3B%20%2F%2F%20returns%20(bool)%3B%20%2F%2Fsend%20given%20amount%20of%20Wei%20to%20Address%2C%20returns%20false%20on%20failure%0A%20%20%20%20%3Caddress%3E.transfer(uint256%20amount)%3B%20%2F%2F%20send%20given%20amount%20of%20Wei%20to%20Address%2C%20but%20throws%20on%20failure%0A%0A%20%20%20%20%2F%2F%20Contracts%20Related%0A%20%20%20%20this%3B%20%2F%2F%20(current%20contract%E2%80%99s%20type)%20the%20current%20contract%2C%20explicitly%20convertible%20to%20Address%0A%20%20%20%20selfdestruct(address%20recipient)%3B%20%2F%2F%20destroy%20the%20current%20contract%2C%20sending%20its%20funds%20to%20the%20given%20Address%0A%0A%0A%0A%20%20%20%20%2F%2F%20Define%20consutruct%20here%0A%20%20%20%20function%20GlobalVariablesAndFunctions(uint%20initialCoins)%20%7B%0A%20%20%20%20%20%20%20%2F%2F%20Initialize%20state%20variables%20here%0A%20%20%20%20%7D%0A%0A%7D” message=”” highlight=”” provider=”manual”/] [otw_shortcode_button href=”https://www.toshblocks.com/solidity/ether-units-time-units-solidity-programming-language/” size=”large” icon_type=”general foundicon-left-arrow” icon_position=”left” shape=”radius” color_class=”otw-blue”]Previous: Ether…
Read More