目录
先导内容
remix安装以及使用
- 浏览器端配置
在浏览器端有俩个选择,分别为英文版与中文版(有些许差别)
- Remix中文版地址:Remix - 中文版 - 智谷星图
- Remix英文版地址(推荐):https://remix.ethereum.org/
下面都以
英文版
为例子介绍1、浏览器输入 https://remix.ethereum.org/
如果出现加载慢,加载不完全的情况,刷新几次即可
2、左侧可以看到我们所有的文件,下面是我们的remix控制台
上图小图标从左到右依次为:
- 创建新文件
- 创建新文件夹
- Github代码片段分享
- 表示打开一个本地文件
控制台图片如下:
- 1 从左至右表示隐藏控制台、清除控制台输出、pending的交易数量
- 2 表示监听所有交易
- 3 表示搜索框
- 4 表示输出区域
- 5 表示使用JavaScript与以太坊交互的区域,可以使用Web3对象
3、点击文件样式图标输入我们的文件名即可(以.sol为后缀)
4、安装必要的插件
点击插件管理器,页面中为这个图标
- 安装compiler
搜索关键字compiler
1.1 智能合约
·智能合约(英语:Smart Contract )是一种旨在以信息化方式传播、验证或执行合同的计算机协议。
智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。
怎么理解智能合约的概念呢?
举个例子:微信和支付宝的信用卡自动还款,这也类似于 智能合约。 当还款日到了,还款条件也满足(在线钱包或者银行储蓄 卡中余额充足),系统会自动进行还款,无需人为干涉。
当然这类程序依赖于中心化平台,依然可以被人为修改。 所以在防篡改的区块链平台出现前,智能合约并没有真正落地。
1.2 以太坊智能合约
以太坊是第一个开源的支持智能合约的 区块链平台。由于以太坊区块链被普遍 接受,因此多数区块链的智能合约采取 与以太坊相似的设计。以太坊借鉴了比 特币区块链的技术,对它的应用范围进 行了扩展。
如果说比特币是利用区块链 技术的专用计算器,那么以太坊就是利 用区块链技术的通用计算机
与比特币相比,以太坊最大的不同点是:它可以支持图灵完备的开发语言,允许 开发者在上面实现智能合约,开发应用,这也是以太坊的最强大之处。 而solidity语言就是以太坊平台上使用最广泛的语言之一。
以太坊的智能合约被广泛应用的一个用途是创建通证,通证可以对应以太坊区块链平 台之上或之外的资产。
下图为某咨询公司使用以太坊智能合 约从事业务的一个图示。图示是一个 典型的 ERC20 通证(一种以太坊智 能合约)发行过程:
一个项目通过智 能合约创建通证,这个通证是实体资 产或线上资产的价值表示物。投资者 (用户)发起交易,向智能合约转入 以太币(ETH),满足规则的智能合 约就一定会向投资者账户转入相应数 量的通证
1.3 .sol文件样例 。
编写智能合约的语言一般用solidity,编写的内容会保存在后缀名为.sol的文件中。一 个 solidity 文件可以包含任意数量的合约(contract)定义、import指令和pragma指令。 下面是一个.sol文件的样例:
1.4 pragma 指令
接下来我们对该智能合约文件中的一些基础语法进行讲解。 第一行是 pragma 指令,它告诉我们源代码是为solidity 0.6.0 及以上版本编写的, 但不超过0.7.0。
换句话说源文件不能用低于0.6.0版本的编译器编译,也不能用 0.7.0版本及以上版本的编译器编译。
pragma一般用在整个程序的第一行:
pragma solidity ^0.6.0;
同样含义的另外一种表述方法可以写成:
pragma solidity >=0.6.0 < 0.7.0;
1.5 合约(contract)定义
合约(contract)是位于以太坊区块链上特定地址的代码和数据的集合。
如下所示,定义一个合约需要声明contract 关键字,随后跟上合约的名字 (SimpleStorage)。
contract SimpleStorage {
}
合约是一个程序的主体,出现的位置一般紧随 pragma 之后。
注意:一个程序可以有多个 contract 定义。
1.6 function
函数在所有的语言中都是一种常见类型。
solidity中的函数关键字是function,之前的 智能合约文件定义的合约下,包含了如下两个函数: 函数可以分为内外两个部分:
1.第一行 { } 之前的内容是对该函数的描述。
2.{ } 里面的部分被称为函数内容,是函数实现其功能的代码。
function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
1.7 保留关键字
保留关键字是系统内部自带的、已被赋予特殊用途的字词,例如 function,不可以 被定义为变量来使用,下面是solidity中一部分的保留关键字:
下面的 pragma、 solidity、contract、function、uint、public、return 都是被 使用的关键字。
pragma solidity ^0.6.0;
contract SimpleStorage {
uint storedData; function set(uint x) public {
storedData = x;
}
function get() public view returns (uint) {
return storedData;
}
}
1.8 代码注释
solidity 支持c风格和c++风格的注释:
// 之后到行尾的文本,都被看作注释,编译器不会编译此内容。 /* 与 */ 之间的文本被看作注释, 编译器不会编译此内容。 注释示例:
function getResult() public view returns(uint){ // 这是一行注释,类似于c++中的注释 /* * 这是多行注释 * 类似于c语言中的注释 */
uint result = 1 + 2;
return result;
}
后续内容
编译组件说明:
Compiler
可以选择Solidity的编译器版本Language
可以选择编程语言EVM Version
可以选择EVM虚拟机版本Auto compile
可以设置自动编译,修改完代码后自动执行编译操作Enable optimization
可以设置对编译进行优化Hide warnings
可以设置隐藏警告信息。Contract
选择需要编译的合约Publish on Swarm
和Publish on Ipfs
分别将合约上传到Swarm和Ipfs这两个分布式文件系统上去Compilation Details
很重要,可以查看编译的信息,包括ABI、字节码、函数Hash等ABI
和Bytecode
分别复制ABI和字节码。- 再下面的部分空白用来显示编译的Warnings和Errors。
我们点击
Compilation Details
就能看到编译之后的一些信息,如下图所示(部分)
NAME
:合约名METADATA
:一些编译相关的信息,比如版本、所用的语言、设置等BYTECODE
:写入区块的字节码ABI
:此智能合约对应的 ABI ,也就是我们合约里面定义的一些接口WEB3DEPLOY
:智能合约编译之后的发布命令,这个就是比较重要的,之后的web3就是调用这段命令来部署合约的METADATAHASH
:数据的一个哈希值SWARMLOCATION
:Swarm网络的一个地址FUNCTIONHASHES
:合约定义的方法的hash,其实我们执行合约的时候就是通过这个hash去找到对应的方法进行执行的GASESTIMATES
:关于矿工费的一个预算,在ETH上进行合约的部署,执行等都是需要矿工费的。一般合约代码越多矿工费越高。点击下面的run图标,可以看到部署,以及账户信息,环境等等
点击deploy之后天可以看到自己的合约已经部署完成,打开之后可以看见我们写的函数
set
,get
了,给set
函数输入一个值,点击get
会得到相应的值
Environment
表示合约部署的环境。Javascript VM
是虚拟了一个节点,而Injected Web3
和Web3 Provider
则真正连接一个节点。Account
代表不同的虚拟账户,每个虚拟账户每个有 100 ETHDeploy
表示合约部署按钮Deployed Contracts
表示已经部署的合约
代码示例编译
solidity代码示例编译