以太坊-区块链开发入门
本教程运行环境为Ubuntu 16.04
环境配置
认识一下以下几个名词:
以太坊:能够在区块链上实现智能合约、开源的底层系统。
testrpc:在本地使用内存模拟的一个以太坊环境,用于开发调试。
geth:全称是go-ethereum,是一个以太坊客户端,用go语言编写,是目前最常用的以太坊客户端,对应真正的以太坊环境。
truffle:以太坊上最受欢迎的开发框架。
solc:solidity编译器。
Node.js:是一个基于 Chrome V8 引擎的JavaScript 运行环境。
web3
安装nodejs与npm(保证nodejs为6.x以上)
curl -sLhttps://deb.nodesource.com/setup_6.x | sudo -E bash –
(若提示curl未安装,先执行sudo apt-get install curl安装curl后再执行上一命令)
sudo apt-get install nodejs
安装solc、solc-cli
sudo npm install -g solc
sudo npm install -g solc-cli
安装truffle
sudo npm install -g truffle
安装testrpc
sudo npm install -g ethereumjs-testrpc
安装geth
如果需要在geth控制台使用solc编译器,前面对solc的安装是不足以使用的,还需要用以下命令安装solc二进制包。
sudo add-apt-repositoryppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
然后安装geth
sudo apt-get installsoftware-properties-common
sudo apt-get install ethereum
入门
1. 查看truffle版本信息
truffle version
2. 测试testrpc环境
testrpc
返回十个可用账户(Available Accounts:0-9)
和十个私钥(Private Keys:0-9)
另有HD Wallet的信息(Mnemonic与Base HD Path)
最后还提示监听本地端口8545。
按Ctrl+C退出testrpc。
3. 创建编程目录,初始化truffle
mkdir ethtest
cd ethtest
truffle init
看提示,给出了三条命令,这在后面都会用到。执行truffle –help查看更多命令:
我们先看一看此时ethtest文件夹下新增的东西:
多出了contracts、migrations、test三个文件夹和truffle-config.js和truffle.js两个文件。作一个说明,contracts是放合约的文件夹,打开会发现已经放了一个合约Migrations.sol;migrations是放迁移操作的文件的,打开会发现名为1_initial_migration.js的文件,具体内容后面作详细说明;test放测试脚本的文件夹;truffle.js是truffle的配置文件,具体内容后面作详细说明;最后,关于truffle-config.js,实际上也是truffle的配置文件,但是它是为了避免windows系统下由于命名引起的冲突而改的名字,在Ubuntu下没有作用,可以删除。
4. 编写合约
cd contracts
nano SimpleStorage.sol
使用官方文档中的SimpleStorage合约,注意文件名和合约名相同,文件扩展名为.sol。
pragmasolidity ^0.4.0;
contractSimpleStorage {
uint storedData;
function set(uint x) {
storedData = x;
}
function get() constant returns (uint) {
return storedData;
}
}
5. 编译合约
truffle compile
该指令只会编译最后一次编译成功之后被修改过的合约文件,以减少不必要的编译。设置"--all"选项,可以强制编译所有文件.
编译完成后ethtest目录下会多出一个build文件夹,在ethtest/build/contracts下有一个编译得到的SimpleStorage.json文件。
6. 迁移(或称部署)合约
注意,打开另一个terminal,在里面执行testrpc,使其监听8545端口,否则后面使用到网络的命令都无法正常执行,出现以下错误:
truffle migrate
出错下面的错误:
这是网络配置的问题。打开truffle.js:
module.exports= {
// See<http://truffleframework.com/docs/advanced/configuration>
// to customize your Truffle configuration!
};
可见并没有配置信息在里面,访问注释里的网站,给出了多种配置供选择,先使用默认的一种配置写入truffle.js即算配置完成:
module.exports= {
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*" // Match anynetwork id
}
}
};
这样一来,在执行truffle migrate等命令时,将默认使用networks网络配置项下的development的网络,不会再出现上面的错误。
详细说说migration文件,打开1_initial_migration.js:
varMigrations = artifacts.require("./Migrations.sol");
module.exports= function(deployer) {
deployer.deploy(Migrations);
};
这是初始的migration文件,对应由truffle init产生的合约Migrations.sol。
如果我们要部署新的合约,新建一个文件,如SimpleStorage_deploy.js,内容为:
varSimpleStorage = artifacts.require("./SimpleStorage.sol");
module.exports= function(deployer) {
deployer.deploy(SimpleStorage);
};
至于语法问题,请看:http://truffleframework.com/docs/getting_started/migrations。
若要将其部署至live网络,先修改truffle.js为:
module.exports= {
networks: {
development: {
host: "localhost",
port: 8545,
network_id: "*" // Match anynetwork id
},
live: {
host: "localhost",
port: 8545,
network_id: "*",
gas:3000000
}
}
};
再执行:
trufflemigrate --network live
即将合约部署到了live网络上了。
与编译类似,此操作只会部署新增了migration文件或migration文件有改动的合约。
7. 控制台调试
truffle console –network live
就进入了控制台。命令与commands通用,只是这时不用加truffle了。注意指定网络,否则会出未部署合约的错误。
查看一下部署在网络上的合约:
用SS替代合约以简短代码输入,注意语法:
var SS=SimpleStorage.at(“0x1e7e7282e7f1279ddb24c493243ac891d320e59a”)
接下来可以就可以调用合约里的函数了,SimpleStorage里有set和get两个函数:
按Ctrl+C退出控制台。
8. 运行测试脚本
truffle test
出错下面的错误:
这是因为development网络没有设置gas参数。
执行:
truffletest --network live
不再报错,因为live网络是设置了gas参数的。但此时test文件夹下并没有放置测试脚本,所以提示如下:
9. 架设服务器
truffle serve
“Serving staticassets in ./build on port 8080”的意思是“在端口8080上提供./build中的静态资源”。
出现下面的错误:
还未解决。
10. 强制重新编译部署全部合约
truffle migrate --reset--network live
注意指定网络。
11. 清除网络和部署的合约
truffle networks--clean
12. 集成nodejs【参考文献:Truffle3.0集成NodeJS并完全跑通http://www.jianshu.com/p/eac99bb0a9bc】
npm init
初始化过程中有一些用括号提示的,按括号内提示输入即可。
安装Truffle合约抽象层运行环境:
安装web3环境:
以太坊-区块链开发入门相关推荐
- 为什么选择Java进行以太坊区块链开发
当有人说Java时,你会想到什么?如果没有,你可以试试old.虽然,其他人可能会说它坚固,可靠和安全.而对于Oodles Blockchain来说,Java意味着"企业级". 毫无 ...
- 以太坊区块链快速入门
一.基本概念 1.什么是以太坊? 以太坊是由社区驱动的技术,为加密货币以太币(ETH)和成千上万的去中心化应用程序提供动力. 属于所有人的银行服务 现实生活中不是每个人都能使用金融服务.但是只要您有网 ...
- 新手怎么学以太坊区块链开发?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载. 在学习以太坊应用开发时,除了学习solidity开发智能合约,一个小白还应该补充 哪些知识?文本将给出相关的学习资源和学 ...
- 以太坊区块链实现去中心化购物功能
在当今的中国,网上购物已经成为了我们不可或缺的一部分,通过电商网站查看商品,下单购物,支付,付款到支付宝,买家收货确认后,货款自动打入卖家的账户,这些购物的体验多数人每天都可能发生.大家都知道,淘宝的 ...
- 区块链开发入门:基于以太坊智能合约构建 ICO DApp
写给前端开发者的第一本区块链开发入门指南,通过从 0 到 1 实战开发一个 ICO DApp 项目(基于 V 神的 DAICO 设计思想),深入掌握区块链及以太坊技术. 为什么要选择区块链开发? 未来 ...
- 以太坊区块链浏览器(二)开发
以太坊区块链浏览器开发,包括合约信息及链上信息展示,web3j的对应API. 更多区块链技术与应用分类: 区块链应用 区块链开发 以太坊 | Fabric | BCOS | 密码技术 | 共识算 ...
- 以太坊区块链也拥堵_以太坊开发人员:EOS刻意拥堵以太坊网络 推高交易费到1美元...
金色财经 比特币7月16日讯根据一些DApp开发人员表示,EOS正在攻击以太坊,试图将交易费提高到1美元.据悉,相关开发人员指责EOS通过随机代币"空投"造成以太坊网络堵塞,而且这 ...
- 区块链开发(五)搭建以太坊区块链浏览器
经过前面文章介绍,已经搭建以太坊的区块链环境,但是没有一个界面能查看到区块链的块数等信息,不是很直观,本篇搭建以太坊区块链浏览器. 下载区块链浏览器代码 uiran@cuiran:~/ethereum ...
- 谈谈区块链入门技能(二):以太坊区块链浏览器如何使用?
上一期我们介绍了比特币浏览器如何使用,本期我们来谈一谈什么是以太坊以及以太坊浏览器如何使用. 什么是以太坊? 以太坊是一个合作运行的.全球性的.透明的数据库.通过共同努力,来自世界各地的参与者维护了以 ...
- 以太坊区块链同步_以太坊69:如何在10分钟内建立完全同步的区块链节点
以太坊区块链同步 by Lukas Lukac 卢卡斯·卢卡奇(Lukas Lukac) Ethereu M 69:如何在10分钟内建立完全同步的区块链节点 (Ethereum 69: how to ...
最新文章
- BZOJ 4407: 于神之怒加强版
- xp 硬盘安装linux双系统,WinXP硬盘安装Ubuntu 11.10双系统全程图解
- 计算机软件及应用stata,蒙特卡洛模拟及其Stata应用实现
- 番茄日志发布1.0.3版本-增加Kafka支持
- 怎么卸载apowerrec_如何删除windows10自带应用
- sql server 锁定_如何使用SQL Server 2014托管锁定优先级控制在线索引重建锁定
- docker容器使用-图解
- 路由算法之距离矢量算法和链路状态算法
- Balanced Numbers数位dp
- 一体机or复合机?企业文印设备该怎么选
- 【Python打卡2019】20190423之52周存钱挑战-for+range()函数使用
- 香港大学韩锴课题组招收CV和深度学习方向全奖博士/博后
- 迪文串口屏的安装方法之卡扣结构带外壳智能屏
- CCNA+NP学习笔记—交换网络篇
- 为什么说 HashMap 是无序的
- equals()的理解
- linux下格式化apfs,下一版 macOS High Sierra 将采用 APFS 文件系统
- 数控系统维修:FANUC发那科编程调试操作图解
- 【JavaScript闭包】JavaScript何为闭包,浅谈闭包的形成和意义
- Apollo2.0自动驾驶quickstart文件夹之apollo_2_0_hardware_system_installation_guide_v1.md
热门文章
- 高通蓝牙耳机(QCC3034)Sink开发基础教程一:高通蓝牙方案介绍及开发环境搭建
- 智能聊天机器人的技术综述
- 二阶矩阵转置怎么求_矩阵的转置怎么求 详情介绍
- excel宏的使用图解教程
- xbox360fsd更新游戏封面_xbox360自制系统fsd更新封面教程
- html 属于mvvm框架,vue.js是mvvm框架吗
- 答粉丝问|火狐浏览器插件简介
- Netapp 存储文件共享-windows 系统应用
- ubuntu出现qt.qpa.plugin报错
- mdpi Algorithms 期刊word 模板下载