分类标签归档:区块链

零知识证明与代码实现


零知识证明定义

以图染色为例子进行说明。证明者可以向验证者证明其知道一个图的有效着色,而不透露它。为了做到这一点,两方执行一个游戏,由证明者用一组随机的颜色给图形上色,然后覆盖它,验证者随机选择一条边。如果证明者的着色是有效的,那么由这条边连接的两个节点必须具有不同的颜色。然后重复,每次换一套不同的颜色,直到验证者相信证明者知道图的有效着色。由于证明者在每一轮之前重新绘制图形,所以验证者不会了解任何有关着色的信息,但验证者可以验证每次都是有效的。 零知识证明比较著名的案例为区块链系统中的数字签名,由证明者产生一个证明来使其他人知道其拥有一个私钥,具体方案是通过私钥对一个消息进行加密,再公开公钥

Read more

区块链原理及代码实践9-PoS算法


POS 共识算法

1. POW有什么问题?

PoW其实就是由所有的节点相互竞争,提交一个难于计算但是容易验证的计算结果,任何节点都可以验证这个这个结果的正确性。但是,

  1. PoW极度浪费算力,只有挖出区块的节点算力有效,其他节点算力都作废。
  2. PoW除了使恶意攻击者不能轻易地伪装成几百万个节点和打垮比特币网络,并没有更多实际或科学价值
  3. 随着比特币产量的不断降低, 矿工人数也会越来越少, 比特币网络的健壮性会越来越低。

鉴于以上问题,POS股权证明诞生了。

2. POS股权证明

权益证明( Proof of Stake,PoS) ,最早在 2013 年被提出,最早在 Peercoin 系统中被实

Read more

比特币原理及其代码实践8-比特币网络


引言

​ 我们所构建的原型已经具备了区块链所有的关键特性:匿名安全随机生成的地址(公私钥加密)区块链数据存储(key-value存储)工作量证明系统(pow)可靠地存储交易(MerkleTree)

​ 尽管这些特性都不可或缺,但是仍有不足。能够使得这些特性真正发光发热,使得加密货币成为可能的,是网络(network)

​ 你可以将这些区块链特性认为是规则(rule),类似于人类在一起生活,繁衍生息建立的规则,一种社会安排。区块链网络就是一个程序社区,里面的每个程序都遵循同样的规则,正是由于遵循着同一个规则,才使得网络能够长存。类似的,当人们都有着

Read more

比特币原理及其代码实践7-Merkle树


回忆:前面说过,比特币交易的解锁和上锁其实是一种基于堆栈的脚本语言,大家可以想一下,这种脚本语言还能干什么?

比特币的脚本语言启发了太坊创始人Vitalik Buterin(那年他20岁)创建以太坊,开发了智能合约。

全节点和轻节点

因为比特币的去中心化特性,网络中的每个节点必须是独立,自给自足的,也就是每个节点必须存储一个区块链的完整副本

随着越来越多的人使用比特币,这条规则变得越来越难以遵守:因为不太可能每个人都去运行一个全节点。并且,由于节点是网络中的完全参与者,它们负有相关责任:节点必须验证交易和区块。另外,要想与其他节点交互和下载新块,也有一定的网络流量需求。

对这个问题也有一个解

Read more

比特币原理及其代码实践6-交易签名和解锁


实现签名

交易必须被签名,因为这是比特币里面保证发送方不会花费属于其他人的币的唯一方式。如果一个签名是无效的,那么这笔交易就会被认为是无效的,因此,这笔交易也就无法被加到区块链中。

思考:哪些数据需要签名?

  1. 之前交易的某个输出的公钥hash,也就是我们钱的源头
  2. 当前交易的全部输出,也就是我们把钱转给了谁

签名在哪个地方?

签名在当前交易的每一个输入

伪代码:

func (tx *Transaction) Sign(privKey ecdsa.PrivateKey, prevTXs map[string]Transaction) {
    ...
    //针对每一个输入Vin
   

Read more

2023-3-22 使用智能合约创建数字孪生体,并实现访问控制


思考:使用智能合约和DHT,而不使用中心化后台和数据库的情况下,如何创建数字孪生体?

  • 智能合约可以看作是一个计算工具,当作后台使用,可以进行逻辑处理和存储简单的数据。
  • DHT可以看作一个文件服务器,用于存储智能合约无法存储的大型数据。

创建数字孪生体的步骤?

  1. 对称加密(AES_key)数字孪生体的数据,并上传到DHT,并返回DHT_key。
  2. 创建两个智能合约:
    1. spec智能合约,用户存放数字孪生体的元数据,包括上面DHT_key。
    2. auth智能合约,存放数字孪生体的role和permission,并初始化权限设置。
  3. 将用户的公钥+AES_key加密,并根据用户地址生成访问权限数组,存

Read more

2023-3-14 区块链链外数据存储和访问控制 思考


阅读:基于区块链的安全数字孪生信息管理 《EtherTwin: Blockchain-based Secure Digital Twin Information Management》

区块链和任何系统融合会带来可追溯不需要中心可信节点的优点(相较于传统第三方信任机构),但也会带来一些需要解决的问题:

  1. 数据如何存储
  2. 如何进行访问控制

区块链如何存储链外数据??

一种常见的方法是使用分布式哈希表 (DHT),因为它们非常适合分散式范例。

数据项基于路由层在网络中进行内容寻址和复制。

Swarm 等现代 DHT 基于已建立的安全 DHT 路由技术 S/Kademlia Baumgart 和

Read more

比特币原理及其代码实践5-地址


review:UTXO和余额模型到底有没有区别?

有,举个例子,比如小红转我80元,小绿转我20元,我再转50元给了小黑。

UTXO模型可以明确的告诉我,我转给小黑的50元到底是来自小红给我的80元加找零,还是小绿的20元加上小红给我的80元加找零。

余额模型却无法做到可追溯,因为我转给小黑50元,是我的余额减50,小黑的余额加50,然后产生一笔交易记录(我->小黑:50元),不能确定我转出去的50来自谁。

引言

在比特币中,没有用户账户,不需要,也不会在任何地方存储个人数据(比如姓名,电话,身份信息等)。

但我们必须要能够实现交易的输出者可以使用这比交易,用官方的话来说,就是你拥有在这

Read more