用js代码理解区块链,最简版本
要想理解区块链的应用场景,需要首先理解区块链的技术,用50行代码就可以初步理解什么是区块链
const SHA256 = require('js-sha256')//哈希算法
class Block{
constructor(index,data,previousHash){
this.index = index;
this.timestamp = new Date();
this.data = data
this.previousHash = previousHash;
this.hash = this.calcHash();
}
calcHash(){
var sha = SHA256.create();
return sha.hex();//blockchain的关键所在
}
static first(data='Genesis'){//创世区块
return new Block(0,data,'0')
}
static next(previous,data='Tranaction data...'){
return new Block(previous.index+1,data,previous.hash)
}
}
//let's get started
b0 = Block.first("Gensis")
b1 = Block.next(b0,"Tranaction Data...")
b2 = Block.next(b1,"Tranaction Data...")
b3 = Block.next(b2,"More Transaction Datasss...")
blockchain = [b0,b1,b2,b3]
console.log(blockchain)
输出结果如下
[ Block { index: 0, timestamp: 2017-12-29T17:39:00.839Z, data:'Gensis', previousHash:'0',hash:'b83beefe99777acf14995d6450cca2ffa3da9223eac4feb39d70bd9201880364'}, Block { index: 1, timestamp: 2017-12-29T17:39:00.841Z, data:'Tranaction Data...', previousHash:'b83beefe99777acf14995d6450cca2ffa3da9223eac4feb39d70bd9201880364',hash:'30653cac3d6415c677cfbbe881ad192979c61029843d03f9b40a3a192f76b593'}, Block { index: 2, timestamp: 2017-12-29T17:39:00.841Z, data:'Tranaction Data...', previousHash:'30653cac3d6415c677cfbbe881ad192979c61029843d03f9b40a3a192f76b593',hash:'9a629894800467082cb475f075e0ff1b600282a76264c9e29c88473b7fb31179'}, Block { index: 3, timestamp: 2017-12-29T17:39:00.841Z, data:'More Transaction Data...', previousHash:'9a629894800467082cb475f075e0ff1b600282a76264c9e29c88473b7fb31179',hash:'8036f9d8537c00099e71841e9803b128e802ab0f10323cbf1a1a786aeef84569'} ]
- redis 学习笔记(1)-编译、启动、停止
- 致研究者:2018 AI研究趋势
- redis 学习笔记(3)-master/slave(主/从模式)
- 解决Chrome或其它WebKit浏览器input和textarea的黄色/蓝色边框问题
- eclipse/intellij Idea集成jetty
- nginx学习(1):编译、安装、启动
- Immutable(不可变)集合
- nginx学习(2):启动gzip、虚拟主机、请求转发、负载均衡
- 使用WiX制作简单MSI安装程序
- 企业应用通用架构图
- CacheManager:–个通用缓存接口抽象类库
- silverlight: http请求的GET及POST示例
- 如何判断AI创造物能够成为“作品”?附独家视频讲解
- 程序员最喜欢的五大神器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- JavaScript 中 this 的错误认识、绑定规则、常见问题讲解
- 实践:SpringBoot实现定时任务的动态增删启停
- Java并发编程的艺术[3]
- R语言 | 根据数据框的顺序进行筛选
- 上帝视角看 TypeScript
- 一文 get 入门 canvas 的最佳路径
- Matlab系列之数组的基本操作
- Matlab系列之数组(矩阵)的生成
- R语言T检验的简单小例子
- ggplot2 修改图例的一些操作
- 实践:SpringBoot实现定时任务的动态增删启停
- Asp.Net Core API 需要认证时发生重定向的解决方法
- 在 Windows 系统上启用远程应用
- ArcGIS Enterprise 配置 nginx 反向代理
- 在安卓手机上通过 Termux 运行编译/运行 .NET 应用