区块链学习 - solidity合约部署

区块链原理

通过https://anders.com/blockchain/hash.html可以直观的了解hashblock(区块)、blockchain(区块链)、distributed(分布)、tokens(代币)各个概念。

开发环境配置

1、 MetaMask钱包

1.MetaMask是什么?

MetaMask是一款在谷歌浏览器Chrome上使用的插件类型的以太坊钱包,该钱包不需要下载,只需要在谷歌浏览器添加对应的扩展程序即可,非常轻量级,使用起来也非常方便。

2.MetaMask安装

chrome浏览器安装MetaMask,直接用MetaMask创建钱包或者通过myetherwallet.com创建钱包,然后用MetaMask导入钱包私钥即可。
开发测试时,最好新建一个测试钱包,万一自己的币搞没就裂了~~

3.MetaMask常用功能


如上图所示,第一个为正式网络,也就是ETH的公链,真实的币就存在公链上。后两个是两个测试网络,点击后便会切换到测试网络,钱包的地址也会随之改变。为了测试方便,在测试网络的钱包中免费获取一些测试用的代币。

4.测试代币获取

Ropsten Test Network测试网络下,点击BUY->ROPSTEN TEST FAUCET会跳转到https://faucet.metamask.io/页面,可以请求获取测试用的eth代币,也可以给别人发送测试代币。操作完成后钱包会显示相应的测试代币数量。

Kovan Test Network测试网络下,获取测试代币的方式是:加入gitter中的faucet组织,链接为https://gitter.im/kovan-testnet/。加入后,MateMask钱包在Kovan Test Network测试网络下,复制当前测试环境下的钱包地址,然后在gitter的社区中,发送自己的钱包地址(@管理员epheph),这位雷锋大兄弟会给你的钱包发送5个测试代币,最后别忘了来句日常感谢~

2、solidity开发环境配置

atom编辑器安装以下两个插件:
autocomplete-solidity
language-ethereum

3、solidity代码示例

solidity代码文件后缀为.sol
以下是完整的,最简单的solidity合约代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// pragam 关键字
// solidity 当前语言
// 0.4 主版本
// .19 副版本
// ^向上兼容,solidity (0.4.19~0.4.99)都可以编译,0.5则不能编译
pragam solidity ^0.4.19;

// construct 关键字声明类
contract Person {
uint age = 0; // 默认类型为internal
string internal name = "佩奇";
string public homeAddress = "北京市朝阳区"; // public声明的属性,会自动生成同名的get函数,返回该属性值
string private company = "孔壹学院";

// 构造函数,与类名同名,首次初始化时调用
function Person() public {
age = 18;
}

// set方法
function setCompany(uint a) public {
age = a;
}
// get方法
function getCompany() view public returns (uint) {
return age;
}

function getCurrentAddres() view public returns (address) {
// msg.sender 返回当前操作合约的钱包的地址
return msg.sender;
}

// 普通函数
function kill() public{
// 析构函数,调用时销毁当前合约
selfdestruct(msg.sender);
}
}

contract ChildPerson is Person {
function test() public {
age = 100;
name = "AWM";
}
}

solidity代码中一定要加;!!!!!!,包括第一句pragam solidity ^0.4.19;

属性访问权限:
public:
1.会生成一个和属性名同名的get函数,这个函数返回属性自己
2.合约内部可直接访问
3.子类可继承属性

internal:
1.合约内部可直接访问in
2.子类可继承属性

private:
1.合约内部可直接访问

4、部署合约

  1. 打开http://remix.ethereum.org/网站,url后会自动补齐当前最先版的solidity``sdk版本,注意自己写的代码向上兼容性。

  2. 将上述代码直接粘贴到左侧编辑器中,会自动编译查错,正常编译通过后,可以在右侧面板点击run选项。各选项解释如下:

    • Environment指合约要部署的网路环境,JavaScript VM是本地的测试网络;injected Web3是发布到公链。

    • Account指部署合约的钱包地址,因为部署合约需要往公链上写数据,所以需要消耗代币。选择本地测试网络的话,有默认的五个免费的钱包,里面各有100以太币。选择部署到公链的话,通过选择MateMask的网络环境(主网或两个测试网络),Account会显示对应的网络环境下的钱包地址(钱包中必须要有代币才行)

    • Gas limitValue默认即可

  3. 完后下方可以选择solidity代码中声明的类,也就是我们要部署到网络中的类,对应上述代码就是PersonChildPerson两个类选择其一。

  4. 之后点击create,支付完所需的代币手续费后,等待部署完成即可,部署成功后便可以在下方看到合约的地址信息,及合约中暴露出来的各种方法,如getAgesetAge等,可以调用这些方法从部署在网络上的合约中写入数据(花费代币)及读取数据(免费),调用kill方法时会执行析构函数selfdestruct,从网络中销毁合约。

至此,一个简单的合约,从代码编写到部署上线的整套流程结束。

Author

Ludis

Posted on

2018-02-06

Updated on

2018-12-10

Licensed under

Comments