当前位置:首页-元宇宙-正文

eth智能合约在线阅读(eth智能合约漏洞)

导语:

Remix是一个https://github.com/ethereum/remix的https://solidity.readthedocs.io/en/develop/智能合约开发环境,提供基本的编译、部署至本地或测试网络、执行合约等功能。Solidity是Ethereum官方设计和支持的程序语言,专门用于编写智能合约。
solidity的基本语法可以去这个网站实战练习(https://cryptozombies.io/zh/)这个超爽边玩。
?

Remix有哪些功能?

  • 开发智能合约(集成了solidity语言的编辑器)
  • 动态调试(debug)智能合约
  • 访问已部署的智能合约的状态和属性
  • 代码分析,给出错误提示,并给出最佳实践的提示
  • 调试和测试Dapp(需要借助于Mist或者其它注入了Web3的工具)

Remix地址(有时候刷新不出来,我的做法是多等会或者多刷新几次):https://remix.ethereum.org/
eth智能合约在线阅读(eth智能合约漏洞)_第1张

说明:

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

2.工作区
正中间是工作区,工作区上半部是代码编辑区,在这里可以写solidity合约。
- 每5秒自动保存。
- 支持多tab
- 左上角的+-符号可以改变字体大小
- 自动语法检查,黄色是警告和建议,红色是语法错误
中部下方是一个交互式的命令行终端。
- 集成了javascript解释器,可以使用js脚本与系统交互。
- 注入了web3对象(只有在web provider和injected provider两种模式下才有)

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

4.编译(Compile)
- 默认每次编辑代码都会自动编译,如果合约有很多依赖,建议关闭自动编译。
eth智能合约在线阅读(eth智能合约漏洞)_第2张
- 详情按钮中有包含编译生成的详细信息。

5.运行(Run)
- 运行环境有三种模式可选:
** JavaScript VM: 这种模式是在浏览器中模拟一个区块链,合约在这个模拟的沙盒中执行,刷新页面就会使所有数据清空,不会做任何持久化,没有注入web3对象。
** Injected Provider:连接到包含注入web3对象的源上,例如Mist和Metamask。
** Web3 Provider:连接到远程节点,需要填写源的url地址和端口,例如geth、ganache等客户端,包含web3对象。
- Account 当前操作的账户,比如用于发布合约、调用合约方法。
- Gas Limit 合约交易的gas最大限量。
- Value 向合约发送以太币。
- Deploy 部署合约。相当于new一个合约实例。(旧版是Create按钮)
- At Address 假定此地址是所选合约的一个已部署的实例。相当于将地址强制转换为一个合约实例。

6.设置(Settings)
- 编译器版本选择
- Text Wrap 编辑器自动换行
- Always use VM at Load 总是在加载时使用虚拟机
- Enable Optimization 编译优化,对执行gas做优化,调试期间不要使用,可能会引起行为异常。

7.分析(Analysis)
这里是编译器做静态代码分析的选项,给出相应的警告。
默认全部勾选,并自动执行。也可以手动执行。

8.调试器(Debugger)
动态调试内容比较多,之后再专门介绍。

9.支持(Support)
这里是一个在线支持的链接,可以在线与remix的开发团队沟通,提交bug或者意见反馈。也可以直接访问地址: https://gitter.im/ethereum/remix
?

取得代币合约:

代币合约的范例很多,https://www.ethereum.org/token有提供一个最小可行的代币合约(MINIMUM VIABLE TOKEN):

注:这个MyToken合约只能做两件事:
创造代币:发起合约时创造指定数量的代币,代币拥有者是发起合约的 Ethereum 账户
转移代币:转移指定数量的代币到指定的 Ethereum 账户
至于一个完整的代币合约,可参考https://medium.com/taipei-ethereum-meetup/erc20-token%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8A-3d7871c58bea。

使用Remix编译合约:

1.点选右上角 + 新增一个档案
名称任意只要扩展名是“.sol”。
eth智能合约在线阅读(eth智能合约漏洞)_第3张
IDE左侧是文件浏览器区域,左上角有一排功能按钮。
- 创建新文件
- 从硬盘中导入文件
- 将项目文件上传至github
- 更新GitHub上的项目文件
- 将项目文件复制到另外一个remix实例中
- 连接到本地硬盘

2.复制合约内容到该档案并编译
Remix预设会自动编译,旁边没有跳出红色的ERROR就代表编译成功(有黄色感叹号不影响)。
eth智能合约在线阅读(eth智能合约漏洞)_第4张

在本地部署合约:

1.设定网络
点选左边上面的run。
Environment选择JavaScript VM代表所有数据都是存在本地内存(功能类似testrpc)。它会提供5个虚拟账户每个有100ETH,随便选一个账户(要记住)。
eth智能合约在线阅读(eth智能合约漏洞)_第5张

2.发送交易部署合约
选择MyToken。可以看到Deploy按钮(旧版是Create按钮)。且已根据合约内容显示必须填入unit256 initialSupply(也就是要发行的代币数量)。输入一个数目并按Deploy,就会发送交易部署合约。
eth智能合约在线阅读(eth智能合约漏洞)_第6张

合约部署成功后,可以看到合约的使用接口。Remix会自动根据合约的内容,产生对应的合约使用接口。可以看到合约有两个功能:balanceOf(查询余额)和transfer(转移代币)。
eth智能合约在线阅读(eth智能合约漏洞)_第7张

底下可以看到log(纪录每一次的操作)。点展示下拉按钮可以看到该笔交易详细数据。
eth智能合约在线阅读(eth智能合约漏洞)_第8张
eth智能合约在线阅读(eth智能合约漏洞)_第9张

执行合约–查询余额:

1.选择刚刚发起合约的账户,可点选帐户右边的图示复制
eth智能合约在线阅读(eth智能合约漏洞)_第10张
注:初始的时候还100个eth,现在变少是因为每调一次智能合约都会花费相应的eth

2.输入账户,点击balanceOf
注:旧版必须用”“把帐户包起来,因为数据传送是用JSON格式,所以要加上”“。如果忘记输入”“就会在log报错
可以在旁边看到执行结果,也就是目前这个账户的代币余额。
eth智能合约在线阅读(eth智能合约漏洞)_第11张

执行合约–转移代币:

1.选择要转出的账户
选择刚刚发起合约的账户。
eth智能合约在线阅读(eth智能合约漏洞)_第12张

2.输入要转入的账户,点击transfer
点击transfer,成功后会看到log更新。
eth智能合约在线阅读(eth智能合约漏洞)_第13张
eth智能合约在线阅读(eth智能合约漏洞)_第14张

3.确认余额更新
再查询转入账户的余额,就可以看到代币余额增加了
eth智能合约在线阅读(eth智能合约漏洞)_第15张

错误情况:
如果选择要转出的账户代币余额不足,这笔交易会失败,就会在log看到错误。
eth智能合约在线阅读(eth智能合约漏洞)_第16张
?

在测试网络部署合约:

1.安装 MetaMask
首先,要连到测试网络,就要安装MetaMask。他是浏览器端的Ethereum钱包,可以链接Ethereum主网和测试网络。安奘后需要建立Ethereum账户。
MetaMask插件的安装使用可以查看我的前一篇文章https://blog.csdn.net/m0_37739193/article/details/81057582
安装好MetaMask后选择测试网络,导入eth不为零的账户或者自己挖矿获得相应的eth,并且要切换到该用户,回到Remix,这次Environment选择Injected Web3,Remix会自动连结MetaMask。
eth智能合约在线阅读(eth智能合约漏洞)_第17张
成功会看到和MetaMask相同账户和Ether余额
注:疑问:我不理解为什么要这样显示(显示两个相同的账户,你不应该显示一个吗),还是哪里有问题了
eth智能合约在线阅读(eth智能合约漏洞)_第18张

2.部署合约
接着用刚才同样的方式,输入一个数目(我这里输入的是1000000)并按Deploy部署合约,就会看到MetaMask的弹出窗口。直接按submit发送交易。
eth智能合约在线阅读(eth智能合约漏洞)_第19张
稍等一点时间(我等了一分钟左右吧,因为要等这个交易被确认),首先在浏览器右下角出现
eth智能合约在线阅读(eth智能合约漏洞)_第20张
点击会弹出如下页面
eth智能合约在线阅读(eth智能合约漏洞)_第21张
部署成功后合约的使用接口就会在Remix中跑出来。
eth智能合约在线阅读(eth智能合约漏洞)_第22张
就可以用同样的方式使用合约了!
复制该智能合约地址,在MetaMask中可以加入该代币。
eth智能合约在线阅读(eth智能合约漏洞)_第23张
注意:我一开始导入部署好的智能合约地址后显示发起该合约的账户该代币余额为0。后来才发现是导入的时候单位写的是18的缘故,因为我总共发了1000000个币,这里填18会显示小数点后三位显示不全所以会显示为0。所以说这里填0余额才会显示为1000000,填1则会显示100000.0
eth智能合约在线阅读(eth智能合约漏洞)_第24张

参考:
https://ethfans.org/posts/deploying-smart-contract-with-remix
https://www.jianshu.com/p/9b301519b7a5
https://www.jianshu.com/p/c3ac1dbdf336
https://www.jianshu.com/p/31c6194bc47d
https://www.cnblogs.com/baizx/p/7280224.html