Fabric测试网络搭建
Fabric测试网络搭建
aliyun centos7 学生机一台
前置条件:
Go语言安装
Docker、Docker-Compose安装
Git安装
node.js、npm安装(使用node.js开发application可装)
Fabric环境搭建:
我当前的空目录地址为:/root/go/src/github.com/kid1999
官方给定的安装流程:
如果需要,请克隆 hyperledger/fabric-samples 仓库
选择合适的版本
将指定版本的 Hyperledger Fabric 平台特定二进制文件和配置文件安装到 fabric-samples 下的 /bin 和 /config 目录中
下载指定版本的 Hyperledger Fabric docker 镜像
直接运行脚本即可,默认拉取最新的版本
12curl -sSL https://bit.ly/2ysbOFE | bash -s -- <fabric_version> <fabric-ca_version>curl -sSL https://bit.ly/2y ...
Fabric基础理论
Fabric基础目录
总体概述
Peer解析
Order解析
MSP与CA
开发指南
部署实践
总体概览
联盟链与公链
Fabric是基于联盟链(参与需要联盟许可)模型设计的,抛去公链的挖矿和无准入门槛。采用外部激励和较小的网络规模提高并发量。
Fabric的模型
Fabric网络模型
Fabric的网络分为channel和联盟,其中一个channel包含几个信息共享的组织,每个组织又有自己的其他小圈子,所以各个圈子错综复杂构成了整个联盟链。
Fabric交易流程
proposal - 建议
用户向各组织的Peer节点发送交易请求
Peer节点根据背书策略运行智能合约。
运行成功后,签名回传给用户。
用户整合签名,打包广播发送给orderer节点
Orderer节点对接收到的所以交易进行全排序
Orderer节点将排序好的区块发送给Peer节点
Peer验证区块交易,通过的区块被提交到账本
最后Peer向用户发送消息,告知交易已提交
应用开发
开发者只需关注application的UI逻辑设计和核心chainCode也就是 ...
Solidity基础
一个Solidity智能合约的定义:
运行在区块链上的一个服务,代码可见,大家都可以调用执行其中的方法,完成信息读写,转账等功能。
一个简单的Solidity智能合约的构成:
其语法类似 JS,也是运行在虚拟机上的。
12345678910111213141516171819202122pragma solidity ^0.5.1; // EVM编译器版本contract MyContract{ // 一个合约 类比Java中的一个类 string value; // 定义一个变量,默认保存在区块链上 constructor() public{ // 初始化函数 value = "MyContract"; } // 一个get方法 // public说明这个一个公开可调用的方法 // view说明这个方法只读不可写 // returns说明这个函数的回传值类型 function get() public view returns(string ...
区块链基础
本文的区块链相关知识,主要基于北京大学肖臻老师的《区块链技术与应用》总结。
区块链基础目录比特币部分
密码学基础
比特币的数据结构
共识协议和系统实现
挖矿算法及难度调节
比特币脚本
软分叉和硬分叉
匿名与隐私保护
以太坊部分
概述:基于账户的分布式账本
数据结构(MPT):状态树、交易树、收据树
GHOST协议:对非主链区块的补偿
挖矿:memory hard mining puzzle
权益证明:由POW向POS转变
智能合约
总结与展望
比特币部分1.密码学基础哈希碰撞: 简述就是给定hash函数 目前不存在一个方法可以找到满足hash(A) == hash(B) 的 A和B ,即我们无法人为制造hash碰撞。该特性叫做 collision resistance
collision resistance用处: 给出A,但是由于本性质的缘故,无法反推出A的具体值。
hiding: 即在给定A和hash函数的条件下,也无法反推出A的取值。
collision resistance和hiding结合实现digital commitment(数据保证) 如:预测结果为A,提 ...
Electron-Vue联动开发
Electron基于Vue.js开发
本文一步一步教你如何使用Electron11和vue-cli4,在完全保留vue开发web应用的习惯下,搭建桌面应用。
目录
安装环境
创建项目
编译运行
增加依赖库
1.安装环境
使用cnpm
1npm install -g cnpm --registry=https://registry.npm.taobao.org
安装/升级vue-cli4
12vue -Vcnpm install @vue/cli -g
2. 创建项目
创建vue项目
1vue create electron-vue-demo
安装Electron
1vue add electron-builder
3.编译运行1npm run electron:serve
4.增加依赖12vue add elementvue add axios
注:不建议再使用SimulatedGREG/electron-vue,太久没更新了。
参考:
掘金
Electron基础入门
Electron
使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序。
目录
安装依赖
基础开发
编译打包
1.安装依赖
下载安装node.js
全局安装electron: npm i -g electron
初始化项目: npm init -y 生成 package.json
创建一个基础的Electron项目如下:
1234my-electron-app/├── package.json // 依赖关系├── main.js // 主进程函数└── index.html // 主页面
具体代码如下:
main.js
12345678910111213141516171819202122var electron = require('electron')var app = electron.app // 引用 appvar BrowserWindow = electron.BrowserWindow // 窗口var mainWindow = null // 主窗口// 创建应用app.on(' ...
SpringBoot整合Kafka
SpringBoot整合Kafka
SpringBoot整合Kafka, 实现消息解耦传输。
1. 环境搭建
win10, zookeeper3.5.5 , kafka2.6.0 , java1.8
zookeeper 资源调度,使用kafka的前提
kafka 消息队列
docker安装详情参见 —> 常用环境Docker运维
2. pom依赖123456789101112<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-streams& ...
spark-streaming整合kafka
spark-streaming整合kafka
spark-streaming整合kafka 基于java实现消息流批处理。
本次计划用在 搜索商品 —> 发送 (用户ID,商品ID) —> Kafka —> spark-streaming —> 商品推荐算法 —> Kafka —> 更改推荐商品队列
1. 环境搭建
win10, zookeeper3.5.5 , kafka2.6.0 , spark 2.4.7 , java1.8
zookeeper 资源调度,使用kafka的前提
kafka 消息队列
docker安装详情参见 —> 常用环境Docker运维
spark 计算引擎
此次先使用win10本地安装调试,Linux安装参照docker安装或直接解压安装
2. 设置kafka消息发送
参见springBoot整合Kafka,可略过使用kafka-console 发送消息
3. pom依赖123456789101112131415161718192021222324<dependency> ...
前缀和
前缀和
通常,涉及连续子数组问题的时候,我们使用前缀和来解决。
我们令 P[i] = A[0] + A[1] + … + A[i]
那么每个连续子数组的和 sum(i, j) = P[j] - P[i-1](其中 0 < i < j)。
例如:
560. 和为K的子数组
123456789101112public int subarraySum(int[] nums, int k) { int res = 0,sum = 0; HashMap<Integer,Integer> map = new HashMap<>(); map.put(0,1); for (int n:nums) { sum += n; // sum1 - k = sum2 if(map.containsKey(sum-k)) res += map.get(sum-k); map.put(sum,map.getOrDefault(sum,0)+1); } ...
前缀树
前缀树
Trie (发音为 “try”) 或前缀树是一种树数据结构,用于检索字符串数据集中的键。这一高效的数据结构有多种应用
自动补全
拼写检查
IP 路由 (最长前缀匹配)
T9 (九宫格) 打字预测
单词游戏
还有其他的数据结构,如平衡树和哈希表,使我们能够在字符串数据集中搜索单词。为什么我们还需要 Trie 树呢?尽管哈希表可以在 O(1) 时间内寻找键值,却无法高效的完成以下操作:
找到具有同一前缀的全部键值。
按词典序枚举字符串的数据集。
Trie 树优于哈希表的另一个理由是,随着哈希表大小增加,会出现大量的冲突,时间复杂度可能增加到 O(n),其中 n 是插入的键的数量。与哈希表相比,Trie 树在存储多个具有相同前缀的键时可以使用较少的空间。此时 Trie 树只需要 O(m) 的时间复杂度,其中 m 为键长。而在平衡树中查找键值需要 O(mlogn) 时间复杂度。
Trie 树的结点结构Trie 树是一个有根的树,其结点具有以下字段:。
最多 R 个指向子结点的链接,其中每个链接对应字母表数据集中的一个字母。本文中假定 R 为26,小写拉丁字母的数量。
布尔 ...