字符串截取

使用 cut 命令截取字符串,例如截取 abc efg 这样以空格分割的字符串,可以这样做:

1
cut -d' ' -f1
  • -d 后面跟的是分隔符这里就是一个空格。
  • -f 后面跟的是分割后选择分割后的字符段,这里选择的是分割后的第一段输出的就是 abc

字符串大小写转换

可以使用 ^, 进行大小写转换,具体如下:

阅读全文 »

以太坊支持自己编写合约在以太坊平台发放代币,既然每个人都可以在平台发布代币,那么就需要一个标准,保证每个代币的合约能正常的接入到平台。这里就说道了 EIP20 也叫,ERC20。但是现在统一都叫 EIP(Ethereum Improvement Proposals),直译过来就是 以太坊改善建议,这个是以太坊社区中发布的一些对以太坊进行改进的建议,并跟一个数字指明这个建议是第多少条建议。那么 EIP20 就是以太坊社区发布的第20条建议。这个建议的详细内容在后面详细说明,大致来说就是一个对代币发布的标准进行了定义。所有想要发布代币的人都需要依照这个标准对合约进行编码。

阅读全文 »

前段时间,公司大佬给推荐了两个比较好用的终端复用工具 screentmux,两个都挺好用的。都可以在后台保持回话,在连接多个 ssh 时是比较方便的,同时运行多个程序的话,也可以避免在多个终端来回切换。

# 安装
我的办公电脑是自己安装的 Linuxmint,是 Ubuntu 的扩展。也是使用的 apt 做软件包管理。安装 tmux 可以使用如下命令:

阅读全文 »

前段时间在对接 NEO,自己搭建了一个 NEO 的私有链测试,NEO 相对来说文档还是比较齐全的。但是,为了资金安全,我们的私钥是自己保存的。所以不能使用 NEO 提供的需要传入私钥的交易接口。所以只能自己序列化,使用 sendrawtransaction 向链上发送交易。但是 NEO 没有对这一块的文档支持。最后参考其他项目完成的序列化这一块的。话归正题,还是来说说私有链的搭建过程吧。

阅读全文 »

地址生成

比特币的地址生成方式如图所示。首先,随机生成一个 256 bit 长度 0 与 1 的随机数,这个随机数就是私钥。私钥在经过椭圆曲线算法之后生成出公钥。这个过程是不可逆的。无法再次通过公钥快速计算出私钥。公钥再经由hash计算得到一个地址。在交易时则可以通过这个地址转出或转入比特币。

下面将介绍比特币地址是如何一步步生成的。

阅读全文 »

加密算法

在网络不可信的大前提下,所有数据传输都是不安全的,都是可篡改、易泄露的。例如,在银行信用卡交易如果不进行加密传输,则所有人都有可能看到这笔交易的详细信息,包括信用卡密码等内容。所以就引入了加密算法,常用加密算法主要分为两类 对称加密非对称加密。先看一下对称加密的主要内容。

对称加密

对称加密中,加密解密使用的都是同一个密钥。例如,通信,甲用密钥对数据加密发送给乙,乙接收信息后,使用密钥对内容解密。这个密钥与加密密钥必须为同一个。这样,甲必须要先把密钥告诉给乙,乙才能使用密钥解密数据。

阅读全文 »

基础概述

默克尔树(Merkle Tree),可以被用于验证任何类型的数据的存储。通常被用作与其他节点的计算机之间进行数据转移的数据完整性以及正确性的校验。
在比特币中。每个区块都有自己的 block header 其中包含了上一个区块的 hash 指针、难度 target 以及 nonce 等信息,最重要的是其中包含的 Merkle root hash。这个信息是当前区块中所有包含的交易信息组成的一颗 默克尔树 的根节点的值。有了这个值就可以保证当前区块包含的所有交易信息都不会被改变。

阅读全文 »

说明

这里所有的内容都是随便写的,不要往这些地址进行交易。因为你会失去你的钱。

WIF

WIF(Wallet import format) 钱包导入格式,(也被称为电子钱包的导出格式)是一种私有的 ESCDSA (椭圆曲线签名算法) 秘钥,意在使私钥更容易复制的方式。
下面是一个可以使用的 WIF 加密、解密的测试套件:http://gobittest.appspot.com/PrivateKey

阅读全文 »

前置声明

本文作为个人观看 肖臻博士 的区块链技术应用公开课的学习、记录以及备查所用。如需转载请邮件到我的邮箱 leor_cao@163.com。附上视频网易云课堂链接地址:—>传送门<—

区块链与比特币的概念

很多人会认为区块链就是比特币。其实不然,比特币只是区块链的一个附属产物,它的作用只是为了激励矿工进行挖矿。而区块链才是真正的核心内容,因为,所有涉及到比特币的交易、发行、记账等等所有的功能,都记录在这个链中。作为技术人,其实本身是不喜欢比特币的。但是对于区块链技术本身而言我觉得这个创造真的是非常伟大的。

阅读全文 »

包管理工具

Go 最初使用 GOPATH 模式管理第三方扩展包。但是,项目使用的第三方包多了,依然使用这种方式一个个下载,则显得太过麻烦。随后在 golang 1.5 引入了 vendor 机制。但是,依然需要将文件下载到本地项目中的 vendor 目录中。所以在 go 1.11 版本后推出了 go module 功能,go module 只需要在本地保存 go.mod 文件以及用作校验的 go.sum 文件即可。
go module 目前尚在初期阶段,还需要完善。例如,之前发布的 go 1.13 版本中。对 go module 进行了优化。
在环境变量中提供了 GO111MODULE 选项,该选项默认为 auto,当项目中有 go.mod 文件,则使用 go module。否则,使用 GOPATHvendor 方式作为包管理。如果不想使用 GOPATH,则可将其设置为 on。只使用 go module

阅读全文 »

make

make 内建函数,只能用来作为 slicemapchannel 的声明,返回的是类型本身,而不是指针,因为它们本身就是一个引用类型。并且会对其进行一些初始化操作。例如,slice 在创建时,会初始化底层数组,并且初始化 slice 的长度、指针和容量等基础数据。

1
s := make([]int, 0, 5) // 创建 slice
2
m := make(map[string]int) // 创建 map
3
c := make(chan int) // 创建 channel
阅读全文 »

简介

Go 中,每一个并发的活动称为一个 Goroutine 或者 协程。当一个程序启动时,只有一个 Goroutine 来调用 main 函数,称之为 主Goroutine。新的 Goroutine 通过 go 关键字进行创建。例如

1
go f() // 新建一个调用 f() 的 Goroutine
阅读全文 »

一致性哈希是啥?

引用百度百科的一段介绍:一致性哈希算法在1997年由麻省理工学院提出,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。

什么情况下我们要用到一致性哈希?

一致性 hash 在分布式系统中应用较为广泛。例如,Redis 集群便是一个典型的例子。常见的生产环境中,为了提高 Redis 的读写性能以及高可用,最常见的方式就是做主从复制,组成 Master-MasterMaster-Slave 的形式,或者搭建 Redis 集群,进行数据读写分离,类似数据库的主从复制读写分离
同样,与数据库类似,单表数据过大时就需要对其进行分库。对于 Redis 也是一样的。数据量过大时,同样需要进行类似操作。但是,Redis 没有提供分库分表的功能。只能自己定义规则。常见的可以使用随机存储,随机存储就会有一个问题,存完之后你也不知道存在了那个服务器,假设现在有 8 台服务器,两两相对进行主从复制的方式成为 4 个节点的集群。如果需要在其中查询数据,则需要遍历 4 台服务器。显然,这样是不合理的。可能你就会想到,用键做 HASH,用 HASH 值取余获得固定的服务器。这样读写都在这台服务器进行。

阅读全文 »

共识算法

共识是分布式系统容错的基本问题。共识涉及多个服务器数据达成一致。一旦集群中的所有节点就数据做出有效决定之后,该决定就是最终的决定。当大多数节点(超过半数支持)则集群数据进行改变。所以,如过有5台服务器,这当中如果挂掉了2台,那么集群照样运行。但如果有更多的服务器挂掉,集群就会停止运行。

什么是Raft

阅读全文 »

客户端命令

etcdctl

etcectl 是官方提供的命令行客户端,其内部是对 HTTP API 的一些封装。在安装包中已经提供了。命令格式为:

1
etcdctl [全局选项]命令 [命令选项] [命令参数]

主要的全局选项包括以下几个:

参数说明
–debug输出调试信息,显示执行命令时发起的请求
–no-sync发出请求前不主动同步集群信息
-o, –output输出响应消息的格式,可以为 simple、json 或 extended
-D, –discovery-srv通过域名查询探测集群成员信息
–insecure-discovery接受非安全的集群信息
–endpoints集群中成员地址列表,多个成员用逗号隔开
–cert-file如果集群需要 HTTPS 认证,提供 TLS 证书文件路径
–key-file认证的证书文件路径
–ca-file域名相关的根证书文件路径
-u, –username用户名和密码信息
–timeout请求连接超时,默认为 2 秒
–total-timeout命令执行总超时时间,默认为 5 秒
-h, –help显示帮助命令信息
-v, –version打印版本信息
阅读全文 »