0%

杂记01


最初理解事物的惰性可能会让你不知所措

01.

众所周知,任何一个公司、组织、或者是机构,都遵循同一套组织架构原则,那就是“下级服从上级、少数服从多数”原则。而对于区块链技术来说,只遵循这个原则的后半句,那就是“少数服从多数”,不存在“下级服从上级”。–>进而言之,在区块链中,根本就没有什么所谓“上级”的概念

02.

地址只是账户在区块链上一个简单的占位符。用于存储 token 或者其他只能由特定私钥解锁的资产。

03.

简单的说,智能合约就是可执行代码。这段代码被部署到智能合约账户的一个地址,区块链上的占位符,其私钥是未知的。而账户可以理解为是地址的一种抽象表达(好比一个大中国(一个以太坊系统),每个中国公民都有一个身份地址(地址),可以通过身份地址找到这个人(账户))

04.

要确定智能合约地址,你需要两样东西:发送账户地址和部署合约时的 nonce(交易数),也就是说智能合约的代码是部署在智能合约账户的地址上的(智能合约地址:智能合约账户上的一个占位符),而智能合约的地址是由在创建合约时可以确定的

05.

以太坊中有两类账户,它们共用同一个地址空间:

外部账户,是由以太坊网络的人类用户创建的帐户。它与公钥、私钥对相关,他是通过对公钥进行二次哈希后结果的最后20个字节导出的。

合约账户,:由智能合约的代码控制。只有合约账户才有代码,其中存储的是 codeHash(这个账户的以太坊虚拟机代码的哈希值),这个字段在生成后是不可修改的,这意味着智能合约代码是不可修改的。

06.

这样看,外部账户就相当于我们平时保存的私人钥匙,只是这把钥匙不同,但打开的门确是相同的,而我们要学习的重点就是这个合约账户,因为他是在外部账户创立(即私钥随机生成后,私钥生成公钥)的时候创建合约就能够确定的一个能够识别不同操作对象(应该说是智能合约代码编译、部署在区块链上)的一个“人”,或者说是一个唯一识别这个合约的归属的对象,之后由这个对象绑定这些智能合约和智能合约相关的操作

07.

智能合约执行是编译一句执行一句,每执行一次都是需要消耗gas的(交易是需要成本的,保障安全;并且燃料可以优化智能合约的执行效率–>我们执行智能合约是需要将成本考虑在内的,这样可以使我们反视考虑智能合约代码的优化)

08.

合约调用合约大概是可以理解为线程之间的通信,因为是一个节点内部调用的过程,是不需要序列化的

09.

EVM计算机架构类似于哈佛架构而不是冯诺依曼结构(哈佛架构是指指令和数据分开存储,而冯诺依曼结构指令和数据统一存储)

10.

从某种意义上来说,智能合约不是完整的图灵完备的,1.存储空间并不是无限 2.执行代码需要消耗gas

11.

区分动态语言和静态语言:类型系统按照「类型检查的时机」来分类:

动态类型是指在运行时才会进行类型检查,这种语言的类型错误往往会导致运行时错误

静态类型是指编译阶段就能确定每个变量的类型,这种语言的类型错误往往会导致语法错误

12.

区分弱类型和强类型:类型系统按照「是否允许隐式类型转换」(也就是自动类型转换–>具体表现为一个变量声明类型后后序可以用其他类型覆盖)来分类,可以分为强类型和弱类型:

javascript和Typescript允许隐式类型转换,所以是弱语言

python不允许隐式类型转换,所以是强

13.

Coinbase交易既是创币交易

14.

比特币单位换算关系如下:

1比特币(Bitcoins,BTC)

0.01比特分(Bitcent,cBTC)

0.001毫比特(Milli-Bitcoins,mBTC)

0.000001微比特(Micro-Bitcoins,μBTC或uBTC)

0.00000001聪(satoshi)(基本单位)

1 bitcoin (BTC) = 1000 millibitcoins (mBTC) = 1 million microbitcoins (uBTC) = 100 million Satoshi

15.

gasprice =baseFee+ TipbaseFee是基本费用,由协议根据区块大小自动计算Tip就是小费,或者书面一点,称之为优先费用(PriorityFee)(矿工只能拿到这部分)

16.

智能合约就是一组规则和规则指导下的数据的合体。相当于一个后端代码+数据库

17.

以太坊两个账户的概念相当于现实生活中的两个人–一个是你自己,另一个是跟随你的管家

18.

以太坊的交易就是一次消息传递,传递的是 数据 以及 价值 (以太币)

区别仅仅在于交易体中是否携带数据。

携带数据的交易可能是一个次智能合约调用;

不携带数据的就是一次普通以太币转账。

智能合约具备接收数据,处理数据的能力。

19.

solidaty函数的接收参数一般会加上”_”符号,是为了区别于全局变量,调用的时候直接采用传入方式调用

20.

以太坊的输入输出很简单,没有将像普通的计算机一样有键盘,网络等输入,也没有显示器,打印机等输出;输入输出都只有两类来源:

输入:

·另一个以太坊虚拟机传来的函数调用所携带的数据

·外部账户调用合约账户,所携带的交易数据

输出:

·运行过程中修改的区块链账户的存储区

·日志

21.

区块链是一种“具有共享状态的加密安全交易单例机器

22.

以太坊节点类型有三种:全节点,轻节点,归档节点

23.

solidaty和js不同的是,solidaty的变量值都有默认值,而js如果只声明类型而不初始化值会是undefine

24.

当使用 npm 安装软件包时,可以执行两种安装类型:本地安装,全局安装(查看系统全局安装地址:npm root -g)

25.

在solidaty中,一个工厂=一个合约=多个合约对象

坚持原创技术分享,您的支持将鼓励我继续创作.