以太坊区块链积分系统示例讲解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011680118/article/details/82462331

这个示例是区块链技术进阶与实践提供的例子,书不错。

本积分系统最原始的源代码在:https://github.com/Blockchain-book/Ethereum-Score-Hella 

注意:下载解压后,要先在项目目录下执行命令 npm i web3,一并下载好依赖的库后,然后再进行编译和部署

本人注释后的源代码在:https://download.csdn.net/download/u011680118/10649989

注意:下载之后如果直接truffle migrate会报错

把build文件夹删掉,再在本地重新进行编译部署即可。

一、背景及基础知识

1. ES6

ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准。

ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现。

ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等

来自 <http://es6.ruanyifeng.com/#docs/intro>

2. babel转码器

Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码,从而在现有环境执行。这意味着,你可以用 ES6 的方式编写程序,又不用担心现有环境是否支持。

Babel 的配置文件是.babelrc,存放在项目的根目录下。使用 Babel 的第一步,就是配置这个文件。

 

3. ESLint

 

4. 项目需求及项目结构图

 

 

 

二、源码分析

https://github.com/Blockchain-book/Ethereum-Score-Hella 下载源码后解压,如果在命令行中直接在contract目录下执行 truffle compile命令,会报错:

需要用npm下载一下依赖的库,在命令行中输入:npm i web3 等待之后原文件目录下多了node_modules文件夹

用sublime text打开文件夹,可以看到组织目录

app是前端html代码和一些脚本程序

    stylesheets里面是app.css,设定网页各个部件的样式

    html是前台代码,index.html里面有客户注册、登陆、商户注册、登陆、银行登陆和测试功能。

    客户登陆后页面跳转到customer.html,页面链接中有当前登陆账户的地址,可以实现查询信息、购买商品、转让积分等功能

    商户登陆后页面跳转到merchant.html,页面链接中有当前登陆账户的地址,可以实现查询信息、添加商品、转让积分、积分清算等功能

    银行登陆后页面跳转到bank.html,页面链接中有当前登陆账户的地址,可以实现发行积分、查看信息等功能

    JavaScript代码的解释见代码注释,主要用到web3来与节点通信,获取节点的账户列表等信息,用到truffle-constract 来生成合约实例,调用合约的方法。这两个js库都可以在项目目录下 npm install 进行下载,会根据package.json确定版本

build 是在compile之后生成的文件夹

contracts、migrations、test 是truffle自动生成的文件夹

node_modules是前端需要的一些依赖文件,在下载web3.js之后有的

以点号开头的文件都是用于JavaScript的转码,可以暂时不管

package.json 前端开发,测试需要依赖的一些库的配置信息,这个文件是 npm init 时创建的一个文件,会记录当前整个项目中的一些基础信息。package.json里面定义的是版本范围(比如^1.0.0),具体跑npm install的时候安的什么版本,要解析后才能决定,这里面定义的依赖关系树,可以称之为逻辑树(logical tree)。

package-lock.json 这个文件却是 node_modules 文件夹或者 package.json 文件发生变化时自动生成的。这个文件主要功能是确定当前安装的包的依赖,以便后续重新安装的时候生成相同的依赖,而忽略项目开发过程中有些依赖已经发生的更新。

来自 <http://www.cnblogs.com/tianzun-blog/p/9275931.html>

node_modules文件夹下才是npm实际安装的确定版本的东西,这里面的文件夹结构我们可以称之为物理树(physical tree)。

安装过程中有一些去重算法,所以你会发现逻辑树结构和物理树结构不完全一样。

package-lock.json可以理解成对结合了逻辑树和物理树的一个快照(snapshot),里面有明确的各依赖版本号,实际安装的结构,也有逻辑树的结构。

其最大的好处就是能获得可重复的构建(repeatable build),当你在CI(持续集成)上重复build的时候,得到的artifact是一样的,因为依赖的版本都被锁住了。

 链接:https://www.zhihu.com/question/62331583/answer/257972185

truffle.js如下:

// Allows us to use ES6 in our migrations and tests.
require('babel-register')

module.exports = {
  networks: {
    truffle: {
      host: '127.0.0.1',
      port: 9545,
      network_id: '*' // Match any network id
    },
    develop: {
      host: '127.0.0.1',
      port: 8545,
      network_id: '*' // Match any network id
    }
  }
}
  • require: 用于加载babel模块,实现JavaScript的转码,以兼容。
  • networks: 指定在移植(Migration)时使用哪个网络。当在某个特定的网络上编译或运行移植时,合约会缓存起来方便后续使用。这里开发使用的是本地的ganache-cli客户端。

webpack.config.js

webpack在执行时,除在命令行传入参数,还可以通过指定的配置文件来执行。默认会搜索当前目录下webpack.config.js。这个文件是一个node.js模块,返回一个json格式的配置对象,或者通过--config选项来指定配置文件。

来自 <https://www.cnblogs.com/zuozuo-blog/p/6560485.html>

三、试运行

在命令行中打开ganache-cli客户端,命令为:ganache-cli  运行端口是 8545

另外开一个命令行,cd到contracts目录下,输入truffle compiletruffle migrate --network develop 命令,把合约部署到区块链上,并使用truffle.js中配置的开发网络

可以看到Score合约地址是0x0e2789开头的。。 查看ganache-cli的命令行,其中打印出调试信息,生成的第三个区块中包含了Score合约地址,也是0x0e2789...

部署成功后,输入 npm run dev 命令,会执行 package.json里面的 dev 后面的脚本,即 "webpack-dev-server" 在本地开启服务器,现在可以访问客户端web页面

在浏览器中输入网址: http://localhost:8000

四、测试合约功能

注意:不同电脑账户不同,每次重启ganache-cli生成的账户也不同

注册客户和商户:我们就用第二个和第三个分别注册为客户和商户

商户账户 0x14d4409c0e31a983ee831e04d5d72f635076b8b5

密码 123

登录后跳转,页面链接末尾是商户地址

客户账户 0x93cbed31e02568a1ef3a2bc2591f74a8920c14ee

密码 空 

注册成功后,登录之后页面跳转,客户账户在链接末尾

银行账户默认是第一个账户

输入银行地址后,密码不用管,后台没有比对密码,点登陆即可跳转到银行界面

0x6abc6d15fbb1f8d83d73912ab33f042d2e4d73a0 

 

猜你喜欢

转载自blog.csdn.net/u011680118/article/details/82462331