以太坊开发------Mist使用:合约及部署合约
Mist 中的合约页面
点击Mist页面中的Contracts,可以看到合约页面
点击按钮 Deploy New Contract 按钮,可以部署一个新的合约,我们点击该按钮, 会看到的上方界面如下:
在From中我们可以选择一个账户,Main Account/account 1, 选择哪个账户,那么那个账户就是该合约的创建者。
那么在构造函数中的msg.sender也就是谁,而同样的变量owner也就是那个账户的地址。
contract Token {
...
address public owner;
function Token() {owner = msg.sender;...
}
Amount这里指的是支付给该智能合约的以太币,之前说过,在以太坊中的架构中,智能合约被看作一个特殊的账户,因此智能合约也能和其他账户一样进行交易,可以接受以太币,也可以付出以太币。
这样的特性,在我们的金融化应用中非常有用,例如众筹合约等。
当然目前是一个代币合约,因此这里不需要给智能合约支付任何以太币。
在代码界面,我们贴上下方的代码:
pragma solidity 0.4.8;
contract Token {mapping (address => uint) public balancesOf;address public owner;function Token() {owner = msg.sender;balancesOf[msg.sender] = 10000;}function transfer(address _to, uint _value) {if (balancesOf[msg.sender] < _value) throw; //避免转移出去的代币超过当前的存货if (balancesOf[_to] + _value < balancesOf[_to]) throw; //避免自己调用自己,或者递归调用balancesOf[msg.sender] -= _value;balancesOf[_to] += _value;}function mint(uint _amount) {balancesOf[owner] += _amount;}
}
注:这里右侧编译区会报错:
Source file requires different compiler version (current compiler is 0.4.20+commit.3155dd80.Emscripten.clang - note that nightly builds are considered to be strictly less than the released version
pragma solidity 0.4.8;
从0.4.9起可以在前面不打^ ,0.4.8/0.4.7等版本还是需要打^,这里我们直接使用最新的0.4.20。
No visibility specified. Defaulting to "public".
function Token()
需要指定方法的可见性:public、private、internal、external。
"throw" is deprecated in favour of "revert()", "require()" and "assert()".
if (balancesOf[msg.sender] < _value) throw;
当前编译器版本已经废除了throw,判断使用revert(),,require(),assert()。
下面是修改后的代码:
pragma solidity 0.4.20;
contract Token {mapping (address => uint) public balancesOf;address public owner;function Token() public {owner = msg.sender;balancesOf[msg.sender] = 10000;}function transfer (address _to, uint _value) public {require (balancesOf[msg.sender] > _value); //避免转移出去的代币超过当前的存货require (balancesOf[_to] + _value > balancesOf[_to]); //避免自己调用自己,或者递归调用balancesOf[msg.sender] -= _value;balancesOf[_to] += _value;}function mint(uint _amount) public {balancesOf[owner] += _amount;}
}
所看到的结果如下(图中还是旧代码):
如上图中2所示,只要我们将合约代码贴上去,如果编译通过的话,我们就会看到Mist自动读取出来了我们需要Deploy的合约名称。即Contract Token。
合约的首字母需要为大写,尤其是在多个合约的时候,程序会优先认为首字母为大写的是主合约。
如上图3中所示,我们可以设置合约的部署速度。之前说过合约是一个特殊账户,而任何账户之间的transaction都需要消耗Gas, Gas由合约本身决定,而每百万gas的以太币则由Oracle来决定,价格越贵速度越快优先级越高,价格越便宜速度越慢优先级越低。
消耗Gas就是消耗以太币,因此用任何账户来部署合约,都必须要输入密码。
部署页面解析
点击下方的部署按钮,我们可以看到弹出的这个页面
合约是特殊的账户,deploy合约在以太坊底层就是一个账户到另一个账户的一个Transaction。
Raw Data就是合约代码的编译后的bytecode, 输入密码,并点击Send Transaction 便可完成合约部署。
记得一定要修改下Provide maximum fee 里面的Gas数量。因为一个合约除了部署之外,还需要执行构造函数,并部署数据,Gas不足的话,会导致部署失败。
(注:这里我并没有进行修改,最后也能部署成功。)
部署完毕后的合约页面是这样的
为什么合约没有第一时间出来呢,因为任何合约是一个特殊账户,任何特殊账户之间的Transaction都需要挖矿挖出来,并得到各个区块的确认。
过了一段时间之后,我们可以看到合约出现了。
(注:这里还是需要在Geth中启用挖矿才能部署成功。)
参考:区块链学堂(17):Mist 3–合约页面&部署合约
作者:以太中文网
专业承接虚拟币一切相关业务,如开发代币,撰写白皮书,搭建官网,上交易所等,咨询方式:15830024981(手机微信同步)
以太坊开发------Mist使用:合约及部署合约相关推荐
- 以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约
以太坊开发(二)使用Ganache CLI在私有链上搭建智能合约 在上一篇文章中,我们使用Truffle自带的客户端Truffle Develop,在私有链上搭建并运行了官方提供的WebPack智能合 ...
- 以太坊开发实战:通过truffle-contract与智能合约交互
以太坊开发实战:通过truffle-contract与智能合约交互 与以太坊的智能合约交互,除了使用web3.js,还可以使用另外一个Javascript库,就是truffle-contract.tr ...
- 以太坊开发入门-ERC20合约
在上一章节中完成了一个非常简单的合约,本节中将按照ERC20协议完成一个合约, 本章部分源代码参考于网络开源代码,详细了解:openzeppelin-contracts/contracts/token ...
- 以太坊是什么 - 以太坊开发入门指南
本文首发于深入浅出区块链社区 原文链接:以太坊是什么 - 以太坊开发入门指南 很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗的方式介绍以太坊开发中涉及 ...
- 以太坊开发入门,完整入门篇(小白可以看看,高手看看自己有没有遗漏的
2019独角兽企业重金招聘Python工程师标准>>> 翻译自:https://medium.com/@mattcondon/getting-up-to-speed-on-ether ...
- eth geth 安卓_零基础学习以太坊开发--安装和使用以太坊客户端geth
一.预备知识 想从事区块链开发,了解以太坊开发的程序员,在刚开始接触以太坊的时候,发现有很多的新名词: EVM solidity go-ethereum(geth) pyethereum Testrp ...
- linux以太坊开发环境搭建
2019独角兽企业重金招聘Python工程师标准>>> 如果你希望马上开始学习以太坊DApp开发,可以访问汇智网提供的出色的在线互动教程: 以太坊DApp实战入门教程 以太坊去中心化 ...
- 以太坊开发入门,如何搭建一个区块链DApp投票系统
点击关注异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 第一节 概述 对于初学者,需要了解以太坊开发相关的基本概念,另外就是如何构建一个基于以太坊的完整去中心化应用例如一个区块链投票 ...
- Web程序员如何入门以太坊开发
我经常构建使用以太坊的Web应用程序,我理所当然地认为每天都使用的是神奇的工具集.我们的生态系统正在迅速发展,我认为很多新人都感到不知所措.以太坊是一项了不起的技术,但它也是新生的,而且根本没有足够的 ...
最新文章
- shp文件导入Oracle并发布到Geoserver
- 迷你世界电锯机器人_迷你世界:三分钟制作超简单飞翔石像机器人报道!
- android sqlite 单例模式,数据储存之SQLite(单例模式)
- FreeSql与SqlSugar性能测试对比
- 窗口背景颜色修改 备忘
- 设计散列表实现通讯录查找系统_[源码和文档分享]利用哈希表实现电话号码查询系统...
- 学习《css世界》笔记之使用css实现凹凸效果
- 物联网核心安全系列——智能监控安全问题
- win8删除后清空回收站文件怎么恢复
- 服务站: WCF 消息传递基础 -- MSDN Magazine, April 2007
- darknet53 作用_darknet53 yolo 下的识别训练
- 在web浏览器页面使用IC卡读卡器
- java md5加密 jar包,java md5加密工具类学习示例
- ADA本月上涨100%,背后或有三个原因
- c++程序员书籍推荐
- DC-DC开关电源 拓扑结构(BUCK BOOST BUCK-BOOST)电路
- socks5与http代理如何转化?stormproxies怎么解决?
- opencv3图像处理小程序(一)
- http://blog.csdn.net/jame_peng
- cad完全卸载教程_如何完全卸载(删除)cad吗? _ 设计学院_设计软件教程自学网...
热门文章
- redis三种集群方案
- 三维数据可视化软件html5,基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型 | 3D组态|图扑软件|数据可视化|blog...
- Wishbone总线快速了解
- python基础分析_数据分析之Python基础
- %3c php 能用什么代替,Phpwind9
- python设置表格格式_python openpyxl表格样式设置
- 没做过项目经理可以考pmp证书吗?普通人考PMP®有用吗?
- 新浪开放平台开发1--认证
- 小米4调整系统分区刷入opengapps stock
- 难得轻闲-海豚湾恋人