前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搭建智能合约开发环境

搭建智能合约开发环境

作者头像
用户7634691
发布2023-02-24 10:36:43
6240
发布2023-02-24 10:36:43
举报

所谓工欲善其事,必先利其器。学习智能合约开发第一步当然是搭建一个顺手的开发环境。

我自己的环境电脑环境是MacBook Pro,操作系统是macOS Monterey。

开发智能合约使用的编程语言叫solidity,搭建开发环境主要分为两个步骤:

  1. 安装IDE
  2. 安装以太坊钱包

安装ide,目前一般有两个选择,一个是使用在线的Remix WEB IDE,或者Remix的桌面版本。另一个选择是使用vscode,并安装相关的插件搭建本地开发环境。本篇文章主要是对第一种进行阐述,vscode的方案感兴趣的可以自己查阅相关资料。

关于以太坊钱包的安装,我之前写过一篇文章专门介绍过,这里就不在赘述了,我直接给出链接:

https://mp.weixin.qq.com/s/-ZykbEiErNpDZ6vlX53YuA

建议继续往下看之前,先参考链接把以太坊钱包安装好。

在线的Remix WEB IDE

地址是:

https://remix.ethereum.org/

打开之后,我们先看左边侧边栏,整体风格有点像vscode。可以看到默认有三个目录,

  • contracts 合约的代码放这里
  • scripts 脚本文件
  • tests 存放单元测试代码

原来的工作区(default_workplace)我们先不管它,新建一个工作区,如下:

然后新建一个目录contracts,并且新建一个test.sol的文件。

大家可能会好奇,这个在线的ide,我们写的代码是放在哪里的。我觉得编辑中的草稿是放在浏览器的本地存储,如果你清楚了浏览器你写的草稿就不见了。这个需要特别注意。我们代码写完也可以选择上传到gist,如下图所示:

不过这个相当于是把你的代码公开在了github gist上,如果不希望公开代码,这个操作要慎重。

把下面这段代码复制到test.sol文件中。

代码语言:javascript
复制
pragma solidity 0.6.6;


contract SimpleBank { // CapWords

    mapping (address => uint) private balances;

    address public owner;
    event LogDepositMade(address accountAddress, uint amount);

    // Constructor, can receive one or many variables here; only one allowed
    constructor() public {
        owner = msg.sender;
    }


    function deposit() public payable returns (uint) {
        // Use 'require' to test user inputs, 'assert' for internal invariants
        // Here we are making sure that there isn't an overflow issue
        require((balances[msg.sender] + msg.value) >= balances[msg.sender]);

        balances[msg.sender] += msg.value;
        // no "this." or "self." required with state variable
        // all values set to data type's initial value by default

        emit LogDepositMade(msg.sender, msg.value); // fire event

        return balances[msg.sender];
    }


    function withdraw(uint withdrawAmount) public returns (uint remainingBal) {
        require(withdrawAmount <= balances[msg.sender]);

        balances[msg.sender] -= withdrawAmount;

        // this automatically throws on a failure, which means the updated balance is reverted
        msg.sender.transfer(withdrawAmount);

        return balances[msg.sender];
    }

    function balance() view public returns (uint) {
        return balances[msg.sender];
    }
}

可以先不用关注代码的细节,这个后面的文章会讲到,这个合约代码实现了一个简易的模拟银行,提供了三个方法,分别是存钱(deposit),取钱(withdraw)和查询余额(balance)。

然后我们编译这段代码,

编译成功后,部署

部署成功后,我们可以测试下几个方法,如下图所示:

在value栏输入100,然后点击deposit,看到日志调用成功,然后可以查询下余额(balance),取一部分钱然后再次查看余额。

程序员都清楚,我们写完代码,一般会先在本地环境进行测试,然后部署到测试环境(配置和数据都接近真实环境)进行测试,最后是部署到生成环境。

智能合约的开发步骤也是类似。刚才我们是在一个模拟的以太坊环境测试的我们的小demo,这个环境叫Javascript VM,可以认为它是一个本地的调试环境。为了更真实的测试合约在以太坊的运行情况,我们需要一个更接近真实环境的测试环境,这个环境叫testnet,我们可以在前面提到的以太坊钱包metamask里选择。首先我们现在ide里选择injected web3,这个环境会尝试链接嵌入在浏览器的web3环境,也就是我们前面安装的metamask钱包,唤起metamask后,我们选择里面的Kavan 测试网络

当然,首次使用这个测试网络你的以太币可能为0,需要充值,因为合约部署的时候需要消耗gas fee。充值的方法这里不表,可以自行查阅相关资料。

桌面版的和在线的操作基本是一样的,这里不在赘述。

微信公众号:犀牛的技术笔记

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 犀牛的技术笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在线的Remix WEB IDE
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档