“记住”是最好的告别,如何用区块链实现信息存储上链?

1745 天前
579

李文亮医生7日凌晨不幸被新冠肺炎夺去了生命。他的英年早逝令我们非常难过。

去年12月,人们对新冠肺炎的认识还很有限,李文亮能够把这个消息传出去,率先在专业人员的范围内拉响警报,这是他高度专业性表现的一部分。在人们后来的追述中,发现他在平时的工作中就展现了令人尊敬的医德。

世界卫生组织今天曾通过推特发文表示,对于李文亮医生的去世感到悲痛。推文说:我们所有人都应当赞美他就新型冠状病毒疫情所做的工作。

有人以太坊区块链上为李文亮医生树了一座碑,合约地址为

0x6E46D3AB7335FFFB0d14927e0B418CC08fe60505

区块高度9432824。李文亮医生的事迹将永远铭刻在区块链上,不可篡改,不可删除。

任何人想要查看这座纪念碑,都可以访问etherscan.io搜索合约地址。这是一个用于查看以太坊交易和合约的网站。

作为一个分布式账本系统,以太坊记录的都是交易信息,这些信息是怎样被记录的呢?

我们知道,以太坊每隔一段时间把交易数据和验证信息打包在一个块里,依次串接起来,就成为一个链。这个块的编号就被称为区块高度。每个块的块头(验证信息)里,保存了前一个块的块头哈希值(ParentHash,父块哈希)。这样区块链里的块就彼此联系了起来。假如我们更改了前间某个块的内容,后面块的父块哈希就和它对应不上,这种块就无法被共识。这就保证了区块链数据的不可篡改性。

将数据保存在以太坊区块链上主要通过交易中的附加数据或部署智能合约来实现。

如何附加数据?

简单来说,以太坊的每个块都被分为了两部分,首先是包含父块哈希值、时间戳等信息的块头。块头所包含的信息还包括:

ParentHash:父块的哈希值

Number:块编号

Timestamp:块产生的时间戳

GasUsed:交易消耗的Gas

GasLimit:Gas限制

Difficulty:POW的难度值

Beneficiary:块打包手续费的受益人,也称矿工

Nonce:一个随机数,使得块头哈希满足POW需求

在生产块头的同时,块中还会包含交易、状态和收据信息。

其中,交易信息中包含:

Type:交易的类型

Nonce: 发送地址的交易计数

Value: 向目标账户发送的金额

ReceiveAddress:接受方地址

GasPrice:为交易付出的Gas价格

Gas:为交易付出的Gas

Data:交易的附加数据

VRS:交易签名结构体

其中Data一栏中就包含了用户想要记录在ETH区块中的信息。这个transaction data 字段本来是用来描述交易说明的,但由于其不会占用Gas也就是不会产生任何费用,于是就成为了一个用来记录内容的字段。

根据区块链本身的特性,每一笔交易都有一个独一无二的ID。通过这个ID,我们可以查看所有的历史交易,包括上面提到的所有内容:交易类型、时间戳、Gas、附加数据等。只要知道了这个ID,我们就可以查看块中包含的信息了。

举个例子,

0x802a072a303a1bb19a20065a262526f2cfda0d1ea16eeb3db6500d9d06f65963

将这笔交易中的附加数据改为UTF-8编码,就可以看到一篇关于疫苗质量的文章。

如何部署智能合约?

智能合约可以简单的理解为一段可执行的程序片段,具体的代码由发布人使用特定的编程语言来编写(以太坊使用的是Solidity编程语言,类似JavaScript),一旦编码完成,这份智能合约就被上传到区块链网络上,即全网验证节点都会接收到你的智能合约。而以太坊的智能合约也可以理解为一个特殊的交易(包括可执行代码的),被发送出去后会被矿工打包记录在某一个区块中,当需要调用这个智能合约时只需要向这个智能合约的地址发送一笔交易即可。社区为李文亮医生建造的纪念碑也是用这种方法保存的。

另一个例子是在合约地址

0xdc7c743110Ec689d82f050302319AE27aF84f8fa

中,你可以看到著名的《板门店宣言》的韩语版。这笔交易是2018年由韩国的一位开发者Ryu Gi-hyeok记录的。

我要如何保存自己的信息?

如果你是不懂得编程的普通用户,可以下载MetaMask浏览器插件,在以太坊主网上进行任何一笔交易,并将希望保存的信息转为16进制编码粘贴在transaction data一栏中即可。需要注意的是,这个过程需要你支付一些GAS(即手续费)。

如果你懂得以太坊使用的Solidity编程语言,可以将内容附加在代码中,部署在以太坊主网上并进行任何一笔交易就可以将自己的信息保存在以太坊上。