什么是Solidity
Solidity是由以太坊团队创建的一种编译的面向对象的编程语言,其语法与 Javascript 相似。然而,与 Javascript 不同的是,Solidity 使用继承并且是强类型的。 该语言的主要目的是开发智能合约并将其部署到区块链上。
认识一个最简单的HelloWorld存储合约
让我们先看一下最基本的例子。现在就算你都不理解也不要紧,后面我们会有更深入的讲解。
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract HelloWorld {
uint256 number;
function set(uint256 _num) public {
number = _num;
}
function get() public view returns (uint256) {
return number;
}
}
我们后面会详细介绍智能合约是如何开发的。
密码学是以太坊的技术基石。在计算机安全领域有广泛应用
这些知识既包括对信息的转换、加解密,以及校验过程,也包括以太坊地址和交易Hash,交易信息RLP编码、基于椭圆曲线公私钥签名、区块Merkle树交易
Merkle 树结构
(又叫哈希树)是一种典型的二叉树结构,由一个根节点、一组中间节点和一组叶节点组成。默克尔树最早由 Merkle Ralf 在 1980 年提出,曾广泛用于文件系统和 P2P 系统中。
其主要特点为:
- 最下面的叶节点包含存储数据或其哈希值;
- 非叶子节点(包括中间节点和根节点)都是它的两个孩子节点内容的哈希值。
快速比较大量数据
对每组数据排序后构建默克尔树结构。当两个默克尔树根相同时,则意味着所代表的两组数据必然相同。否则,必然不同。
由于 Hash 计算的过程可以十分快速,预处理可以在短时间内完成。利用默克尔树结构能带来巨大的比较性能优势。
快速定位修改
以下图为例,基于数据 D0……D3 构造默克尔树,如果 D1 中数据被修改,会影响到 N1,N4 和 Root。
因此,一旦发现某个节点如 Root 的数值发生变化,沿着 Root --> N4 --> N1,最多通过 O(lgN) 时间即可快速定位到实际发生改变的数据块 D1。
非对称加密
公钥是对私钥使用椭圆曲线的乘法运算得到的
Keccak算法
Keccak是一种被选定为SHA-3标准的单向散列函数算法,在设计上与SHA-2存在极大差别,之前针对SHA-2的攻击方法无法有地攻击Keccak。
?? Keccak算法采用了一种称之为海绵的结构,海绵结构由两个阶段,一个是吸收阶段,另外一个称之为压缩阶段。在海绵函数中,输入数据被分为固定长度的数据分组。每个分组逐次作为迭代的输入,同时上轮迭代的输出也反馈至下轮的迭代中,最终产生输出哈希值,其输入数据没有长度限制,输出哈希值的比特长度分为:224,256,384,512。
区块链的发展与密码学紧密相连如果我们来看区块链的历史,会发现区块链的历史和密码学的进展是紧密相连的。
每一个新的区块链核心都需要一个核心算法,这个算法来支撑着整个系统的架构。
以上简单介绍了密码学在区块链体系中起到的作用,密码学可以为一切虚拟网络的安全性提供保证,安全性是一切交易的基础,区块链网络离不开加密算法这块基石。而且,随着科技发展日新月异,加密算法也还会不断改进,因此,我们有必要对区块链技术中涉及的底层密码学基础理论进行深入研究和分析,进而推动区块链技术的快速发展。
参考 https://www.jianshu.com/p/34be61a2b51f
关于更多密码学知识 https://yeasy.gitbook.io/blockchain_guide/05_crypto
本文暂时没有评论,来添加一个吧(●'◡'●)