diff options
Diffstat (limited to 'solidity.html.markdown')
| -rw-r--r-- | solidity.html.markdown | 48 | 
1 files changed, 29 insertions, 19 deletions
| diff --git a/solidity.html.markdown b/solidity.html.markdown index a0f8cd40..d215180d 100644 --- a/solidity.html.markdown +++ b/solidity.html.markdown @@ -4,6 +4,8 @@ filename: learnSolidity.sol  contributors:    - ["Nemil Dalal", "https://www.nemil.com"]    - ["Joseph Chow", ""] +  - ["Bhoomtawath Plinsut", "https://github.com/varshard"] +  - ["Shooter", "https://github.com/liushooter"]  ---  Solidity lets you program on [Ethereum](https://www.ethereum.org/), a @@ -109,9 +111,9 @@ contract SimpleBank { // CapWords      /// @notice Get balance      /// @return The balance of the user -    // 'constant' prevents function from editing state variables; +    // 'view' (ex: constant) prevents function from editing state variables;      // allows function to run locally/off blockchain -    function balance() constant public returns (uint) { +    function balance() view public returns (uint) {          return balances[msg.sender];      }  } @@ -134,7 +136,7 @@ uint constant VERSION_ID = 0x123A1; // A hex constant  // All state variables (those outside a function)  // are by default 'internal' and accessible inside contract  // and in all contracts that inherit ONLY -// Need to explicitly set to 'public' to allow external contracts to access	 +// Need to explicitly set to 'public' to allow external contracts to access  int256 public a = 8;  // For int and uint, can explicitly set space in steps of 8 up to 256 @@ -236,7 +238,7 @@ uint x[][5]; // arr with 5 dynamic array elements (opp order of most languages)  // Dictionaries (any type to any other type)  mapping (string => uint) public balances;  balances["charles"] = 1; -console.log(balances["ada"]); // is 0, all non-set key values return zeroes +// balances["ada"] result is 0, all non-set key values return zeroes  // 'public' allows following from another contract  contractName.balances("charles"); // returns 1  // 'public' created a getter (but not setter) like the following: @@ -341,25 +343,26 @@ function increment(uint x, uint y) returns (uint x, uint y) {  // Call previous functon  uint (a,b) = increment(1,1); -// 'constant' (alias for 'view') +// 'view' (alias for 'constant')  // indicates that function does not/cannot change persistent vars -// Constant function execute locally, not on blockchain +// View function execute locally, not on blockchain +// Noted: constant keyword will soon be deprecated.  uint y = 1; -function increment(uint x) constant returns (uint x) { +function increment(uint x) view returns (uint x) {      x += 1;      y += 1; // this line would fail -    // y is a state variable, and can't be changed in a constant function +    // y is a state variable, and can't be changed in a view function  } -// 'pure' is more strict than 'constant', and does not  +// 'pure' is more strict than 'view' or 'constant', and does not  // even allow reading of state vars  // The exact rules are more complicated, so see more about -// constant/pure: +// view/pure:  // http://solidity.readthedocs.io/en/develop/contracts.html#view-functions  // 'Function Visibility specifiers' -// These can be placed where 'constant' is, including: +// These can be placed where 'view' is, including:  // public - visible externally and internally (default for function)  // external - only visible externally (including a call made with this.)  // private - only visible in the current contract @@ -384,7 +387,7 @@ function depositEther() public payable {  // Prefer loops to recursion (max call stack depth is 1024) -// Also, don't setup loops that you haven't bounded,  +// Also, don't setup loops that you haven't bounded,  // as this can hit the gas limit  // B. Events @@ -399,11 +402,15 @@ function depositEther() public payable {  event LogSent(address indexed from, address indexed to, uint amount); // note capital first letter  // Call -Sent(from, to, amount); +LogSent(from, to, amount); -// For an external party (a contract or external entity), to watch using  -// the Web3 Javascript library: -Coin.Sent().watch({}, '', function(error, result) { +/** + +For an external party (a contract or external entity), to watch using +the Web3 Javascript library: + +// The following is Javascript code, not Solidity code +Coin.LogSent().watch({}, '', function(error, result) {      if (!error) {          console.log("Coin transfer: " + result.args.amount +              " coins were sent from " + result.args.from + @@ -413,6 +420,8 @@ Coin.Sent().watch({}, '', function(error, result) {              "Receiver: " + Coin.balances.call(result.args.to));      }  } +**/ +  // Common paradigm for one contract to depend on another (e.g., a  // contract that depends on current exchange rate provided by another) @@ -709,7 +718,7 @@ contract CrowdFunder {          return contributions.length - 1; // return id      } -    function checkIfFundingCompleteOrExpired()  +    function checkIfFundingCompleteOrExpired()      public      {          if (totalRaised > minimumToRaise) { @@ -829,7 +838,7 @@ someContractAddress.callcode('function_name');  ## Additional resources  - [Solidity Docs](https://solidity.readthedocs.org/en/latest/)  - [Smart Contract Best Practices](https://github.com/ConsenSys/smart-contract-best-practices) -- [Solidity Style Guide](https://ethereum.github.io/solidity//docs/style-guide/): Ethereum's style guide is heavily derived from Python's [pep8](https://www.python.org/dev/peps/pep-0008/) style guide. +- [Superblocks Lab - Browser based IDE for Solidity](https://lab.superblocks.com/)  - [EthFiddle - The JsFiddle for Solidity](https://ethfiddle.com/)  - [Browser-based Solidity Editor](https://remix.ethereum.org/)  - [Gitter Solidity Chat room](https://gitter.im/ethereum/solidity) @@ -850,9 +859,10 @@ someContractAddress.callcode('function_name');  - [Hacking Distributed Blog](http://hackingdistributed.com/)  ## Style -- Python's [PEP8](https://www.python.org/dev/peps/pep-0008/) is used as the baseline style guide, including its general philosophy +- [Solidity Style Guide](http://solidity.readthedocs.io/en/latest/style-guide.html): Ethereum's style guide is heavily derived from Python's [PEP 8](https://www.python.org/dev/peps/pep-0008/) style guide.  ## Editors +- [Emacs Solidity Mode](https://github.com/ethereum/emacs-solidity)  - [Vim Solidity](https://github.com/tomlion/vim-solidity)  - Editor Snippets ([Ultisnips format](https://gist.github.com/nemild/98343ce6b16b747788bc)) | 
