在上一张我们学习了Truffle项目的创建,部署等相关内容,今天我们就来实战一下.

今天我们要做3件事:
1) 学习搭建一个Solidity IDE(Remix).
2) 使用这个Solidity Ide编写一份智能合约.
3) 在我们前面第1,2,3章中部署的私有网络节点集群中部署这个合约,并能够在不同的节点中调用这个合约. Remix,是一个Solidity开发语言的Ide, 它是一款运行在浏览器端的solidity ide,也是官方推荐使用的ide. 另外还有其它的solidiy ide,比如:Ethereum Studio, IntelliJ IDEA Plugin, Vistual studio extension...等这些ide的详细情况请参考官方文档:
https://solidity.readthedocs.io/en/latest/index.html 我们主要讲解Remix.

官方推荐的Solidity基于浏览器端的Ide(Remix)

运行Remix有两种方式,一种是直接用浏览器打开网址: https://remix.ethereum.org/
直接打开官方部署的编辑器,进行开发. 另外一种方式就是在本地部署Remix服务, 顺序运行下面的命令:
> git clone https://github.com/ethereum/remix
> cd remix
> npm install
> npm start
Remix服务就部署好了,然后在浏览器中打开:http://127.0.0.1:8080
就可以直接使用本地部署Remix进行开发了. 本地搭建Rmix 编辑器的好处,是可以随意修改编辑器中,源代码的字体.
vim ./node_modules/brace/index.js

找到下面的内容:
var editorCss = ".ace_editor {\
position: relative;\
overflow: hidden;\
font: 10px/normal 'Ubuntu Mono', 'Monaco', 'Menlo', 'Consolas', 'source-code-pro', monospace;\
direction: ltr;\
}\
.ace_scroller {\
position: absolute;\
overflow: hidden;\
top: 0;\
bottom: 0;\
background-color: inherit;\
-ms-user-select: none;\
-moz-user-select: none;\
-webkit-user-select: none;\
user-select: none;\
cursor: text;\
}\
在font这这一行,把字体修改成自己喜欢的大小和样式.

然后重新执行命令:
npm install
npm start

重新打开网页,即可看到效果:

在Remix上编写第一份智能合约

打开浏览器,访问http://127.0.0.1:8080, 新建文件'SimpleStorage.sol'
pragma solidity ^0.4.0;
contract SimpleStorage {
uint storeddata;
function set(uint x) {
storeddata = x;
}
function get() constant returns(uint retVal) {
return storeddata;
}
function multiply(uint a) returns(uint d) {
return a * 7;
}
}

这个SimpleStorage功能很简单,把一个数乘以7并保存起来,提供获取和设置它的接口.

大家最好手动输入以上内容体验一下Remix的效果.也可以故意输错,看看Remix是如何提醒错误的.

Remix调试模式

第一种是默认模式:javascript vm
第二种,是通过本地私有网络的rpc端口,链接到本地私有网络进行调试
还记得我们第2章中创建的以太坊私有网络节点集群吗?  进入之前的私有网络目录,并使用我们讲过的方法启动节点:
cd ~/Documents/private-chain/
geth --datadir ./data/00 --networkid 314590 --ipcdisable --port 61910 --rpcport 8200 console
回到Remix浏览器Ide中,选中右侧边栏的'Contact'选项卡.在'Execution environment'选项中,选择:'web3 provider', ide会弹出提示,让你输入之前我们启动的私有网络的rpc地址和端口, 输入:
http://localhost:8200 确定, 可以看到ide弹出提示:
Invalid JSON RPC response: ""
我们按照官方提供的方法,增加几个选项,启动命令修改之后如下:
geth --datadir ./data/00 --networkid 314590 --ipcdisable --port 61910 --rpc --rpcapi 'web3,eth,debug' --rpccorsdomain '*' --rpcport 8200 console
####我们增加了以下几个命令选项:####
--rpc --rpcapi 'web3,eth,debug' --rpccorsdomain '*'
然后Remix重新链接私有网络的RPC地址, Idea没有了错误提示. 回到刚才启动的网络节点,在命令行输入命令查看账号:
> eth.accounts ["0x5fba50fce50baf0b8a7314200ba46336958ac97e"]
观察Remix中, 有侧边栏'Contract' tab页中的'Transaction origin',这里显示的就是这个账号地址.  
点击下方的'create'按钮.错误又来了:

    callback contain no result Error: authentication needed: password or unlock

提示账号被锁定,需要'Transaction origin'中指定的账号的密码,或者解锁账户.
回到geth命令行,执行下面的命令解锁账户:
> personal.unlockAccount("0x5fba50fce50baf0b8a7314200ba46336958ac97e", 'password of account')
true
再次点击'Create', 出现提示:
    

并且在geth命令行中,看到了一个提示:
> INFO [06-19|00:21:11] Submitted contract creation fullhash=0x5aaf0021c94f52e37eda6c17cfbea2995c1ad1935816e7cac84c73448bd6ab2d contract=0xa7fdc326fa65a15665e3637ff33a120ff3758cdb
> 就像之前我们在第三章中,从一个账户发送以太币到另一个账户,需要调用miner.start(),挖矿来确认我们的交易一样.
这里我们调用一下:
> miner.start(3); admin.sleepBlocks(1); miner.stop();
INFO [06-19|00:22:31] Updated mining threads threads=3
INFO [06-19|00:27:08] Successfully sealed new block number=38 hash=b7fdac…eb3c3f
INFO [06-19|00:27:08]

区块链入门(5)Truffle 项目实战,Solidity IDE, 智能合约部署的更多相关文章

  1. 区块链入门(4)Truffle创建项目,编译,及项目部署

    上一章的结尾说这一次要讲编写一个智能合约部署到测试网络集群中,并进行交易,但我自己越看越觉得内容挺多的.先讲下truffle的项目创建,编译和部署的问题,然后再做上面说的事情吧. truffle是一套 ...

  2. 区块链入门到实战(38)之Solidity – 条件语句

    Solidity支持条件语句,让程序可以根据条件执行不同的操作.条件语句包括: if if...else if...else if 语法 if (条件表达式) { 被执行语句(如果条件为真) } 示例 ...

  3. 区块链入门到实战(37)之Solidity – 循环语句

    与其他语言类似,Solidity语言支持循环结构,Solidity提供以下循环语句. while do ... while for 循环控制语句:break.continue. Solidity – ...

  4. 区块链入门到实战(36)之Solidity – 运算符

    Solidity – 算术运算符 Solidity 支持的算术运算符,如下表所示: 假设变量A的值为10,变量B的值为20. 序号 运算符与描述 1 + (加)求和例: A + B = 30 2 – ...

  5. 区块链入门到实战(28)之Solidity – 介绍

    Solidity语言是一种面向合约的高级编程语言,用于在以太坊区块链网络上实现智能合约.Solidity语言深受c++.Python和JavaScript的影响,针对以太坊(Ethereum)虚拟机( ...

  6. 区块链入门到实战(27)之以太坊(Ethereum) – 智能合约开发

    智能合约的优点 与传统合同相比,智能合约有一些显著优点: 不需要中间人 费用低 代码就是规则 区块链网络中有多个备份,不用担心丢失 避免人工错误 无需信任,就可履行协议 匿名履行协议 以太坊(Ethe ...

  7. 区块链入门级别认知(blockchain)

    区块链入门级别认知(blockchain) 前言:今天参加了迅雷关于区块链的大会,学习和感受总结一下 之前的认知在:几个混迹互联网圈关于区块链 耳熟能详的 热词 “比特币” “区块链” “挖矿” ,知 ...

  8. 区块链入门到实战(34)之Solidity – 变量

    Solidity 支持三种类型的变量: 状态变量 – 变量值永久保存在合约存储空间中的变量. 局部变量 – 变量值仅在函数执行过程中有效的变量,函数退出后,变量无效. 全局变量 – 保存在全局命名空间 ...

  9. 区块链入门到实战(30)之Solidity – 基础语法

    一个 Solidity 源文件可以包含任意数量的合约定义.import指令和pragma指令. 让我们从一个简单的 Solidity 源程序开始.下面是一个 Solidity 源文件的例子: prag ...

随机推荐

  1. 学会学习:高效学习方式(使用vscode-snippet有感)

    入职以来我们团队一直都在使用vscode编辑器,后来也有人开始使用webstorm.很久之前我突然为每天重复的编写.vue文件里面的export.<script lang="scss& ...

  2. 7.STM32中GPIO理解

    端口概述 在STM32中,每个I/O端口可以由软件配置成为输入/输出模式.复位期间或刚复位后,I/O端口被配置成浮空输入模式.所有的GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时, 它们可以被激 ...

  3. nginx1.14.0版本server、location、rewrite配置

    server配置demo 在192.168.10.140(centos7)上修改: /home/program/nginx/conf/nginx.conf 添加一个server server { li ...

  4. jquery datatable数据初始化

    一个datatable的初始化问题,困扰了在下整整半天,最后在网上各位大神的帮助下,终于解决了. 首先分析一下我所遇到的问题: 在HTML上有个下拉框,我需要获取下拉框的值来从后台数据库中获取不同的数 ...

  5. gradle项目

    gradle构建web项目 0.安装gradle http://services.gradle.org/distributions/ 下载对应版本:gradle-5.2.1-bin.zip 解压到自定 ...

  6. vs2015 iis express启动不了及安装DotNetCore.1.0.0-VS2015Tools.Preview2失败的解决方法

    直接用管理员账户打开cmd,进入exe所在的文件夹在运行命令DotNetCore.1.0.0-VS2015Tools.Preview2.exe SKIP_VSU_CHECK=1不要加引号. PS:如果 ...

  7. 关于ueditor插入不了动态地图

    1. 打开编辑器根目录下面的ueditor.all.js文件,找到: table.setAttribute("data-sort", cmd == "enablesort ...

  8. Python中文繁简体转换工具

    Openccpy ___ _____ __ ___ ___ ___ _____ __ __ / __`\/\ '__`\ /'__`\/' _ `\ /'___\ /'___\/\ '__`\/\ \ ...

  9. springboot 问题总结

    一:返回格式化日期 如果我们是用fastjson处理成jsonString,可以通过下面两种方式处理 1,在接受实体上@JSONField(format="yyyy-MM-dd HH:mm: ...

  10. HTTPS 基本流程3

    前文说到了6 组key material, 12个hash 值,非常迷惑, 今天才搞明白, 原来所有这些内容就是 对称密钥的内容. 上面的图 虽然不是很清晰,但是, 其实也已经写明白了, 就是 右边的 ...