写点什么

基于 XuperChain 的区块链项目从 0 到 N(二)

作者:刘旭东
  • 2022 年 3 月 07 日
  • 本文字数:2360 字

    阅读完需:约 8 分钟

基于 XuperChain 的区块链项目从 0 到 N(二)
区块链的基础知识

上一篇文章中,使用 XuperChain 搭建了一个基础的区块链环境,为了能够真实的完成一个区块链的项目,首先应该了解区块链是如何工作,并且了解其中的基本原理,这样才能更好的利用现有工具进行相关的项目开发。

我将从我个人的理解出发,讲述我的理解并将这个理解加入到实际项目中。区块链技术本质上就是去中心化。对于传统的信息系统,所有的数据存储与服务器中,数据是中心化管理,虽然公司在保护信息的安全,但是并不能够确保我们存入的数据不被修改,即使修改了数据,作为使用者我们也不会得到任何的通知,这样无法保证数据的准确和安全。

区块链使用分布的存储方式,每个用户都保存了整个链中的数据,并且通过机制能够制衡和保证数据的准确性,当然这里付出了算力和存储的额外的成本。区块链可以理解成为一个计算网络,这个网络中通过智能合约等机制保证了数据的安全,这是区块链的价值所在。以下两张图比较清晰的解释了区块链与传统的技术区别。



对于区块链的项目,有几个基础的概念需要比较清晰的理解,这样才能在后续的使用中有的放矢:

交易:也称事务,是对区块链进行状态更改的最小操作单元。通常表现为普通转帐以及智能合约调用

智能合约:是一种旨在以信息化方式传播、验证或执行合同的计算机协议,可以使用很多种方式编写

区块:区块是区块链领域记录交易的数据结构

区块链:一个共享数据库,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征

以上是几个比较宽泛的概念,在这些大概念下会有一些更加细致的技术点,我们会在后面项目中逐步深入。

区块链项目的使用流程

在我们即将演示的项目中,我们希望构建一个 web 页面,用户通过访问网页能够完成区块的一些操作,这些过程中的数据将使用区块链进行存储,并且完成交易。后续我们会虚拟一个用户场景,这样方便理解和使用。

作为一个区块链相关领域的开发者,可以整体分为两个大类:第一类是核心开发者,这些人主要关注区块链底层技术的开发,关注算法以及如何开发一个链,XuperChain 的开发者可以归到这个类别中。另一个大类则是应用的开发者,这些人可能是前端后端开发,也可能是移动领域的开发者,他们通过调用一些现有的区块链技术,实现一个场景或者业务的应用,这些人可以了解基础的技术,就是将区块链集成至已有的应用中。本系列教程中会关注业务的开发,但是在使用的过程中也会有相关技术的讲解。


XuperChian 的基本功能

区块链账户体系如果用一句话说明,那就是:私钥 ---> 公钥 ---> 地址。一般而言,私钥通过随机数生成,随后基于密码算法生成公钥和地址,并且这个过程是单向不可逆。

私钥:正如银行账户一般需要密码登入,区块链的账户也是通过密码的方式管理的,只不过这个密码也就是“私钥”,要更为复杂。大家都知道,计算机是用 0、1 存储数据,私钥就是由长度为 256 的 0、1 组成。对于区块链私钥而言,想要破解这套密码,就算把全世界的计算机都运转起来,也运算不到它的亿分之一,因而足够安全。公钥:它是私钥的补充,以验证私钥的“签名”,并在区块链全网公开。整个过程简单来说,就好比要动用你的账户的资产,那么你需要"私钥"来对这个行为盖个“签名”,同时把可以验证这个签名对不对的“公钥”,告诉所有人,那么其它人就可以验证这个行为合法性及来源。

以上是通用的说法,对于 XuperChain 使用了两种类型的账户,包括普通账户以及合约账户。(1)普通账户通常由账号(address)、公私钥对以及余额组成。账号可以操作转账。(2)合约账户相比普通账户而言,是一个更高级的账户类型,可以为多个账户角色进行权重分配,分配之后多个角色(包括普通账户或者合约账户)可以共同管理合约账户下面的数据资产(包括智能合约、访问权限列表、余额等)。相比传统中心化的权限管理模式而言,不是由某个账户对数据资产进行专权化管理;账户权限一但创建之后,即实现了不同权重账户的多中心化资产管理模式,不同账户角色也可以通过共同签名来更改权限。

首先创建一个普通用户:

$ bin/xchain-cli account newkeys --output data/bobcreate account using crypto type defaultcreate account in data/bob
复制代码

在文件的 output/data 文件夹可以看到相关的账号文件,打开 bob 文件可以看待如下信息:

具体的各文件内容如下

private:

{
"Curvname": "P-256",
"X": 23915557366501404843853230135487374892816252885682583208544870727247882354228,
"Y": 39704426681482427650248497607545466687552553948745757450429324952525918383479,
"D": 110650419382774045511984543930612543761359970936747491262237481231106073822241
}
复制代码

public:

{	"Curvname": "P-256",	"X": 23915557366501404843853230135487374892816252885682583208544870727247882354228,	"Y": 39704426681482427650248497607545466687552553948745757450429324952525918383479}
复制代码

address: mywusoc4eyWcfioxCnKEFAYniD5QGDLX3


普通账户的资产只归属一个人,而合约账户会分配多个账户共同管理合约账户下面的资产(包括智能合约、访问权限列表、余额等)。因此,在部署合约以及需要多方共同管理资产时,需要使用合约账户;其他应用场景下,普通账户与合约账户没有明显区别。


对于公钥私钥问什么长成这样,这是由于生成公钥和私钥采用了椭圆曲线密码学的原因。这种椭圆曲线密码学(英语:Elliptic curve cryptography,缩写为 ECC),一种建立公开密钥加密的算法,基于椭圆曲线数学。这个知识点不是一句话能说清楚的,有机会我会尝试简短的描述一下。读者也可以自己在互联网中寻找答案。


可以通过以下命令创建合约用户

## 创建合约账号bin/xchain-cli account new --account 1111111111111111 --fee 2000
复制代码

合约账号要求是 16 位的数字,所以才长成这个模样。


这篇内容就写到这里,希望能对大家有所帮助,下一篇再见。有问题可以给我留言,我尽力解答。


发布于: 2022 年 03 月 07 日阅读数: 103
用户头像

刘旭东

关注

一个乐于思考的工程师 2017.11.10 加入

七年就是一辈子,交个朋友!

评论

发布
暂无评论
基于 XuperChain 的区块链项目从 0 到 N(二)_区块链_刘旭东_InfoQ写作平台