美文网首页
智能合约开发神器-Remix

智能合约开发神器-Remix

作者: 泡沫与周期_白羊Jerry | 来源:发表于2017-11-29 14:14 被阅读1574次

    Remix是一个基于solidity语言的在线智能合约开发IDE,它提供从编译,调试到部署的全流程工具,功能非常强大。

    界面

    打开Remix, 就会看到它的工作区:

    remix.png
    1. 文件夹管理
      最左边是文件夹管理,里面列出了当前的工作区里的文件,remix可以支持从本地文件夹读取文件。

    2. 工作区
      正中间是工作区,工作区上半部是代码编辑区,在这里可以写solidity合约。
      下半部是日志区,在执行智能合约时,会显示transaction相关的信息。

    3. 功能区
      最右边是功能区,也是最为强大的地方,最主要的就是编译和运行区了,调试区其实也很强大,但是对于一般开发者太难用了(我..)

    • 编译
      编译里会显示当前合约的编译结果以及编译错误和报警等信息
    • 运行
      在运行区,你可以选择不同的环境(虚拟环境,内置web3等)部署和运行你的合约。
      工作区里的合约代码编译后,可以在这个区里部署和查看。

    Remix使用示例

    对于智能合约互相调用,我一直有一个疑问,如果用户A调用合约a,而合约a又调用了合约b,那么在合约b的代码执行时,msg.sender是谁?是用户A还是合约a?

    为了解决这个问题,我们来亲自动手验证下:

    1. 打开remix,输入代码
    pragma solidity ^0.4.9;
    
    contract Called {
        address public caller;
        
        function Test() {
            caller = msg.sender;
        }
    }
    
    contract Caller {
        Called public called;
        
        function Caller(address _called) {
            called = Called(_called);
        }
        
        function Go() {
            called.Test();
        }
    }
    

    代码里写了一个Called和一个Caller合约,当我们调用Caller.Go()时,它会去调用对应Caller的Test()函数, Caller就会将msg.sender记录下来。

    1. 部署Called
      在功能区的编译tab看到编译没有问题后,点开运行tab,我们可以选择browser/ballot.sol:Called合约,然后点击Create,部署。(注意,这里一定把上面的Envonment选项选成Javascript VM)


      remix-c1-create.png

      这时我们应该能看到Called已经部署了,右下多出了一个已经部署的Caller实例,我们可以点击复制按钮复制该实例的地址。

    2. 部署Caller
      在运行区中间选择Caller合约,这里可以看到它的Create里是可以接收一个参数的,我们把刚刚复制的Called地址复制进去(记得用引号包围)


      remix-c2-create.png

      点击Create,我们就部署了一个Caller了,该Caller里有一个Called合约的引用。

    3. 测试
      好,我们现在就可以测试啦,点击运行Caller合约的Go函数,可以看到日志里输出了一些transaction信息,但是Called里面的caller值没有更新,我们还需要点一下caller获取当前的最新值。


      remix-c2-run.png

      可以看到,caller值更新成了0xbbf289d846208c16edc8474705c748aff07732db, 而这个就是下面的Caller合约的地址。

    于是我们可以得到结论,当合约再去调用合约时,msg.sender会是上一个合约的地址,而不是交易发起者的地址。

    相关文章

      网友评论

          本文标题:智能合约开发神器-Remix

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