所谓工欲善其事,必先利其器。学习智能合约开发第一步当然是搭建一个顺手的开发环境。
我自己的环境电脑环境是MacBook Pro,操作系统是macOS Monterey。
开发智能合约使用的编程语言叫solidity
,搭建开发环境主要分为两个步骤:
安装ide,目前一般有两个选择,一个是使用在线的Remix WEB IDE
,或者Remix的桌面版本。另一个选择是使用vscode,并安装相关的插件搭建本地开发环境。本篇文章主要是对第一种进行阐述,vscode的方案感兴趣的可以自己查阅相关资料。
关于以太坊钱包的安装,我之前写过一篇文章专门介绍过,这里就不在赘述了,我直接给出链接:
https://mp.weixin.qq.com/s/-ZykbEiErNpDZ6vlX53YuA
建议继续往下看之前,先参考链接把以太坊钱包安装好。
地址是:
https://remix.ethereum.org/
打开之后,我们先看左边侧边栏,整体风格有点像vscode。可以看到默认有三个目录,
原来的工作区(default_workplace)我们先不管它,新建一个工作区,如下:
然后新建一个目录contracts
,并且新建一个test.sol的文件。
大家可能会好奇,这个在线的ide,我们写的代码是放在哪里的。我觉得编辑中的草稿是放在浏览器的本地存储,如果你清楚了浏览器你写的草稿就不见了。这个需要特别注意。我们代码写完也可以选择上传到gist,如下图所示:
不过这个相当于是把你的代码公开在了github gist上,如果不希望公开代码,这个操作要慎重。
把下面这段代码复制到test.sol文件中。
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。充值的方法这里不表,可以自行查阅相关资料。
桌面版的和在线的操作基本是一样的,这里不在赘述。
微信公众号:犀牛的技术笔记