美文网首页智能合约开发
【区块链基础05】-Browser-solidity 右侧的奥秘

【区块链基础05】-Browser-solidity 右侧的奥秘

作者: Geeks_Chen | 来源:发表于2018-02-02 20:03 被阅读62次

    一、使用Browser-solidity 来编译合约&部署合约

    https://ethereum.github.io/browser-solidity

    合约源代码

    pragma solidity 0.4.9; 
    contract DemoTypes { 
      function f(uint a) returns (uint b) { 
          uint result = a * 8; 
          return result; 
      } 
    }
    

    这个时候在这个地址的左侧,赋值粘贴上述的代码,然后就可以看到右侧编译好的代码:


    p16.png

    赋值粘贴这段代码,且web3.eth.accounts[0] 也处于解锁状态,即可部署到以太坊的私有链上。并可以执行和调用。


    p25.png
    > a_demotypes.f.call(100)
    800
    > a_demotypes.f.call(125)
    1000
    

    二、智能合约Solidity 源代码分析

    源码:

    pragma solidity 0.4.9;  
        contract DemoTypes {
            function f(uint a) returns (uint b) 
            {
                uint result = a * 8;
                return result;
            }
        }
    

    第一行源码解析:这行是必须的,否则编译器将不知道该如何选择编译器,以及编译器版本,pragma solidity 中的pragma是关键字,代表程序开始,solidity 代表本智能合约是有Solidity 语言所撰写的,0.4.9 代表的是编译器版本,注意:从0.4.9起可以在前面不打,0.4.8/0.4.7版本还是需要打
    编译器版本向下兼容:

    p36.png

    第二行源码解析:
    contract DemoTypes { ... }
    Solidity中Contract和面向对象语言中的类很类似。有带持久数据的变量,以及能改变这些变量的function,在不同的Contract实例中调用一个function,将会执行一个在EVM(以太坊虚拟机)中的function调用。
    由此可见,Solidity中的智能合约和传统面向对象语言中的类很相像,因此有构造函数,有继承,有变量,有function,也有抽象类等传统概念。
    由Solidity所写的智能合约,经过编译后就会由EVM来部署执行

    Solidity语言是一种类JS的语言,因此很多编码规范和JS很相似

    第三行源码解析:
    function f(uint a) returns (uint b) { ... }
    上边说过,contract中包含了变量和方法(function)。function f(uint a) returns (uint b)代表定义了一个名为f的方法,输入变量为unit a,输出为unit b.
    unit 代表无状态的整形数字,即大于0的整数。
    unit = unit256,最大值为2的256次方,这个数字对于绝大数的数学运算是足够的。
    相对于unit来说还有带负数的整数类型,即int,int = int256,取值范围-2^128 - 2^128

    function 的核心代码

    function f(uint a) returns (uint b) { uint result = a * 8; return result; }

    Solidity 是一个类型语言,因此每个变量都需要定义它的类型,unit/int/string/var
    Solidity 编码风格鼓励在操作符前边加一个空格,uint result = a * 8;

    三、介绍Browser-solidity 右侧的秘密

    Browser-solidity是一个官方提供的一个基于浏览器的合约编译器,非常好用,而且build版本会紧跟最新的Solidity的build版本。但由于网络原因以及GFW的存在,有可能另一部分人访问很慢,进而影响开发速度。

    本地部署Browser-solidity方法
    Browser-solidity Github地址:https://github.com/ethereum/browser-solidity

    step1:将源码下载到本地,并解压缩。


    p44.png

    本地打开效果如下:然后就可以随意的撰写自己的智能合约了。


    p64.png

    四、Browser-solidity 细节详解

    1.当前的solidity版本,如上图截图所示为0.4.9,这个默认用的是当前最新的release版本。
    2.点击下拉框,可以选择不同的版本,包括还未成熟的最新构建版本,或者是之前的版本,个人建议,尽量使用release版本。


    p82.png

    3.点击create,会在内存中将该智能合约创建一个实例,即将下边的web3 deploy代码部署在虚拟机的内存中。


    p91.png
    4.bytecode 是源代码的编译产物,这个也是最终会被放到区块链上的标识。任何在网络上的人都可以读到这段bytecode.
    5.interface 是智能合约除了bytecode之外的另一个核心,他是该智能合约和外界沟通的核心.
    6.web3.deploy 代码,是可以直接部署在geth网络上的一段部署代码,只要复制粘贴这段代码,就可以直接在一个区块链私有链上进行部署,并且调用他。

    7.from 代表合约由那个账户生成,那个账户生成,则生成所需的gas就需要该账户承担,默认为eth.accounts[0],因为所有的挖矿所得的以太币也默认都存在该账户中。data:代表的就是bytecode gas:代表的是为了部署该合约最多准备的gas数量,当然实际上可能用不了这么多gas,具体消耗以实际使用量为准,这里只是设定一个最大值。
    8.最后这段是一个典型的JavaScript的异步调用方法,将上面的new 方法的结果传递给下一个方法 function(e,contract)在下一个方法中处理如果挖矿成功的显示结果。

    参照资料:http://www.8btc.com/browser-solidity

    相关文章

      网友评论

        本文标题:【区块链基础05】-Browser-solidity 右侧的奥秘

        本文链接:https://www.haomeiwen.com/subject/wndfzxtx.html