计算机

区块链概念和流程

疑问

Dapp是什么?去中心化应用
web3是什么?在干嘛?
contract是什么 什么是smart contract
智能合约到底是什么?

助记词对应多个私钥,助记词丢了怎么办?完蛋了

createWallet做了什么链上的相关操作?createWallet的address是如何进入到以太坊的?
PoW PoC 有什么区别?
梳理我们当前的RPC交互都有哪些?我们自己怎么自测这些RPC交互呢?
矿工执行交易的具体算法是什么?
加密方式有哪几种?加密货币用到的加密方式有哪些?
什么是token?
什么是Etherscan client?
private key lifecycle mgmt 是干嘛的?
send addUnApproved ApproveTransaction 有什么关系

概念

以太坊 Ethereum

是一个开源的、有智能合约功能的公共区块链平台。通过其专用加密货币以太币(Ether,又称“以太币”)提供去中心化的虚拟机(称为“以太虚拟机”Ethereum Virtual Machine)来处理点对点合约。收中介费

metamask 以太坊钱包

特点

智能合约

运行在区块链上的程序,需要支付手续费给矿工或权益人

分布式应用程序

不会关机 不会停掉

代币

智能合约会创造代币(以太币ETH),让用户、投资、管理者的利益一致

叔块uncle block

将速度较慢的、未及时收入母链的较短区块链并入,以提升交易量。有向无环图

权益证明

proof of stake 相较于工作量证明更有效率

由支链、状态通道、分片来降低主链负担,扩展其实用规模。

组件
p2p网络
共识规则
交易
状态机EVM 执行字节码
数据结构 & 经济安全

EIP 以太坊改进提议

https://ethereum.org/zh/eips/
Ethereum Improvement Proposals
以太坊改进提议(EIP)是为以太坊潜在新功能或流程提出建议的标准。 EIP 包含提议改进的技术规范,并作为社区的“真相来源”。 在 EIP 的过程中,将会讨论和制定以太坊的网络升级和应用标准。

EIP 作为一个中心角色,记载以太坊的变化并且记载在以太坊中。 它们是人们提议、辩论和适应变化的途径。 有各种不同类型的 EIP,其中包括会影响共识并需要网络升级的用于底层协议更改的核心 EIP,以及用于应用程序标准的 ERC。 例如,创建 token 的标准,ERC20 或 ERC721 允许应用程序使用相同的规则处理所有 token,使得创建互操作应用程序更加容易

ERC 以太坊征求意见提案

Ethereum Request for Comments
代表以太坊已正式化的提案。它是由EIP(Ethereum Improvement Proposals以太坊升级提案)经过以太坊开发团队各种审议和测试后通过的一种提案,即对有用提案进行标准化

web 3.0

Web 3.0支持新的商业模式,让用户能够控制自己的数据,将价值从平台传递给网络参与者,并通过去中心化提高安全性。
NFT、社交令牌和协议原生令牌的概念允许创造者发布新产品,试行新商业模式,并与粉丝建立直接关系,增加盈利潜力,同时减少大型采掘平台的力量。nft越来越多地被用于表示游戏内部资产,与今天的数字游戏道具不同的是,它的便携性、开放性实用性和数字所有权(带有不同的IP权利)。
NFT的可追溯性使创建者能够决定如何以及以何种条款分发内容。
ROI潜力很高,收益潜力可以在一级和二级市场销售中建模,从而为每一项新资产或权利带来永久收益。

在NFT中,数字资产现在可以被验证为真实的,数字拥有的,交易的,并且赠送的道具可以有实际的遗产(通过游戏创造),并且可以持续支付给创造者。区块链提供了一个透明的账本,帮助消费者在更道德的层面上理解稀缺性。


Web3 跟区块链有关。Web3 就是所有权

它不是集中式的,没有单一的公司可以控制它;

任何一种服务都有多家提供商,通过分布式协议连起来,用户可以极小的成本,从一个提供商转移到另一个服务商。

区块链简直就是天然的基础设施。因为区块链是分布式数据库的一种实现,本身就是分布式的,而且信息一旦上链,就无法修改。

不同网站的数据交换。 不同网站都可以自由读写同一个用户的数据,并且这些数据是可以信赖的,从而保证用户进入另一个网站,就好像进入同一个世界的不同地区。

按照区块链的设计,用户需要有一个数字钱包,它是你在虚拟世界的身份证和银行账户。你的身份、财产、消费,都通过这个数字钱包来标识。网站通过数字钱包的 ID,来识别你是谁。

另一方面,有了数字钱包以后,银行和金融也就变成虚拟的了,这让虚拟世界更像现实世界了。

区块链允许写入任意数据,我们虚拟生活的所有数字记录都可以放在区块链上面。

如果每一样虚拟物品都有自己的一个编号,把它们记录在区块链,那么就可以确定它们的主人(即关联到数字钱包)。
https://www.ruanyifeng.com/blog/2021/12/web3.html

DeFi 去中心化金融

DeFi的全称是Decentralized Finance,即“去中心化金融”,也被称为“开放式金融”,当前几乎全部的DeFi项目都在以太坊的区块链上进行。

以太坊是一个去中心化应用程序的全球开源平台。在以太坊上,可以不受地域限制地通过编写代码管理数字资产、运行程序。其生产的加密货币称为以太币(Ether,简称“ETH”)。

DeFi是基于开放的去中心化平台开发的一系列金融类应用,整个业务流程是链上的交互动作。

与传统金融相比,DeFi有更强的开放性和包容性:第一,DeFi不需要依赖任何中心化的主体来提供信用中介或者背书;第二,没有准入限制,即任何一个联网的人都可进入;第三,任何第三方均无法阻止任何一笔交易,也不能逆转任何一笔交易。

Pseud onymous 匿名的 假名的

swap 互换交易

swap是指两个对等主体之间对他们各自持有的金融工具的利益的一种交换.较为常见的是外汇掉期交易和利率掉期交易,多被用作避险和投机的目的。
金融衍生品
以一种或多种基础资产或指数为基础,以杠杆信用交易为特征的产品,包括远期、期货、掉期(互换)和期权
1.高风险性
2.表外反应性 不符合传统的计量和会计确认标准
3.时态是未来式
衍生工具是双方在未来某一时间进行交易的合约

Address

每个钱包都有自己独特的 wallet address。主要功能是让你进钱和出金用的。就好像你有Maybank,Public Bank,CIMB Bank 等等。每个银行都有户口号码,你要存钱或转钱进去你的户口,都必须输入你的银行户口号码才可以转进去。虚拟货币钱包也是一样的道理,Wallet Address 就好比是你的户口号码。如果想要把虚拟货币转进钱包,你就必须输入该钱包的 Wallet Address 才能够把虚拟币转过去

The identification of a sender or receiver of cryptocurrency on a blockchain network. Crypto addresses are derived from private keys and are just a bunch of alphanumeric characters. They do not identify the participant by name. However, if an address is matched with the name of a person either by a hacker, government agency or a flaw in some software component, a person’s transactions and coin balance can be easily viewed by anyone using that address

account 账户 对象 object

type
external
contract
state 由下面几个组成
nonce 数量 transactions 或者 contracts
balance wei的数量
storageRoot 根节点的散列
codeHash EVM的hash
code

密码

密码不是私钥,它是在创建账户时候的密码(注意可以修改)。密码在以下情况下会使用到:

  1. 作为转账的支付密码
  2. 用keystore导入钱包的时候需要输入的密码,用来解锁keystore的 ?? 为什么钱包要解锁?

私钥

私钥由64位长度的十六进制的字符组成,比如:0xA4356E49C88C8B7AB370AF7D5C0C54F0261AAA006F6BDE09CD4745CF54E0115A,一个账户只有一个私钥且不能修改。通常一个钱包中私钥和公钥是成对出现的,有了私钥,我们就可以通过一定的算法生成公钥,再通过公钥经过一定的算法生成地址,这一过程都是不可逆的。私钥一定要妥善保管,若被泄漏别人可以通过私钥解锁账号转出你的该账号的数字货币。

keystore

将私钥以加密的方式保存为一份 JSON 文件,这份 JSON 文件就是 keystore,所以它就是加密后的私钥。Keystore必须配合钱包密码才能使用该账号。

助记词

私钥是64位长度的十六进制的字符,不利于记录且容易记错,所以用算法将一串随机数转化为了一串12 ~ 24个容易记住的单词,方便保存记录。
助记词是私钥的另一种表现形式
助记词可以获取相关联的多个私钥,反过来私钥没法获取助记词。

转化关系

私钥+算法=公钥 公钥+算法=地址 这一过程是不可逆的
比特币是基于转账,以太坊是基于账户,每个账户有一个地址。以太坊的转账不能改变地址。
私钥+密码 = keystore
keystore+密码 = 私钥 解密keystore
助记词 -》 种子 -》 私钥 -》 子私钥 + 地址

keystore KDF
Keystore常见于以太坊钱包,它是将私钥以加密的方式保存为一份 JSON 文件,这份 JSON 文件就是 keystore,所以它就是加密后的私钥。Keystore必须配合钱包密码才能使用该账号。

助记词 seed phrase

私钥是64位长度的十六进制的字符,不利于记录且容易记错,所以用算法将一串随机数转化为了一串12 ~ 24个容易记住的单词,方便保存记录。注意:

助记词是私钥的另一种表现形式
助记词可以获取相关联的多个私钥,反过来私钥没法获取助记词。
要弄清楚助记词与私钥的关系,得清楚BIP协议,是Bitcoin Improvement Proposals的缩写,意思是Bitcoin 的改进建议,用于提出 Bitcoin 的新功能或改进措施。BIP协议衍生了很多的版本,主要有BIP32、BIP39、BIP44。

Dapp

Decentralized Application 去中心化应用

区块链2.0后,可以在区块链上运行智能合约、Dapp等应用。DApp基于区块链,主要出现在以太坊、EOS等分布式平台或网络上,不依赖任何中心服务器,实现去中心化的目的。DApp离不开智能合约。也可以说,依托智能合约的约束,使得DApp无需听命于任何中心化服务器或节点,实现自治。除此之外,DApp还必须做到安全存储,保障隐私。

DAPP=前端+智能合约。前端可以使用任何语言编写,只要能够充分展示用户界面,调用后端的代码即可。这里面,智能合约就是连接DAPP和数据库的桥梁,相当于传统互联网APP中的API连接器,其结构:
  前端→智能合约→区块链

1)DApp通过网络节点去中心化操作,可以在用户的任何个人设备(包括手机、电脑)上运行。

  2)DApp运行在对等网络。不依赖中心服务器,不需要专门的通信服务器传递消息,也不需要中心数据库来记数据,保存在用户个人空间。

  3)DApp数据加密后存储在区块链上,以依托于区块链进行产权交易、销售,承载没有中介的交易方式。

  4)DApp参与者信息被安全储存,可以保护数字资产,保证产权不会泄露、被破坏。

  5)DApp必须开源、自治,可以由用户自己打包生成、签名标记所属权。其发布信息不受任何机构限制。

Nonce

number only used once。在加密通信只能使用一次的数字。Nonce是一个只被使用一次的任意或非重复的随机数值。

在比特币中,Nonce主要用于调整pow挖矿的难度,而在以太坊和HPB等图灵完整的区块链系统中,Nonce除了调整挖矿难度外,在外部账户的每笔交易中也都存在一个Nonce。这个Nonce是一个连续的整数,在每个账户发送交易时所产生,其主要设计目的是为防止双花。 每个外部账户(私钥控制的账户)都有一个Nonce值,每一个账户从同一个节点发起交易时从0开始连续累加,每累加一次,代表完成一笔交易。当前面的Nonce处理完成之后才会处理后面的Nonce。

HD wallet

hierachical deterministic wallets 等级制度的确定性的钱包

BIP协议

助记词和私钥的关系
用HD钱包(BIP32)为每个交易分配一个地址

UTXO

UTXO是Unspent Transaction Outputs的缩写,没有花掉的交易输出,实际可以理解为在一次转账时剩余没有转出的资金。
账户交易模型和账户余额模型
比特币的记账算法里没有余额这个概念。在区块链的分布式账本上记录的只有一笔笔的交易,并不会直接记录一个账户当前余额是多少。假设当前用户A余额是1000元,如果用户A给用户B转100元,这笔转账会被记录成:
交易1 用户A给用户B转账100元
交易2 用户A给用户A自己转账900元 (UTXO)

通过UTXO来计算余额,只需要看最近一次UTXO本身和这个UTXO后给自己转账的金额就好了。

简单来说,UTXO就是通过给自己转账来记录余额,计算自己余额只需要计算最近一次自己转给自己的记录加上之后别人转给自己的记录即可

DAO

DAO即Decentralized Autonomous Organization,去中心化自治组织,亦有译为“自协组织”。DAO 是通过一系列公开的规则,可以在无中心化干预和管理的情况下、以民主投票范式自主运行的组织机构。

DAO 的治理权利通常由一组匀质或非匀质的治理通证(governance token)表达,参与者可以通过购买或者作出贡献来获得通证,并成为组织的治理者。治理者可以以通证为凭据参与组织的决策和运营,并享受相应的权益。

在区块链中,这个公开的共识规则通过开源的智能合约保障执行,其安全性和确定性由区块链本身予以确保。智能合约一旦部署到区块链上,它的交易记录和规则都只能在区块链上维护。

DAO 通常不设置决策层和管理层,而采取社群民主投票的方式予以治理。无论是对于治理规则的调整还是重大事务决策,一般需要经过治理者以治理通证投票的方式推进执行。利益相关者在合作与竞争中改变智能合约中描述的规则,从而实现民主自治

上述一切行为需要在DAO智能合约中进行周详考虑和实现,因此智能合约的设计对于DAO尤为重要,是其能否发挥集体智慧和成功与否的关键。

DAO 是一种开放、透明、民主的组织治理方式,然而也存在若干已知的缺点。

除了决策效率较低之外,一个巨大风险在于代码错误。如果攻击者发现正在运行的DAO代码中存在漏洞,可以基于漏洞展开攻击,盗取组织的财产,或破坏治理秩序,这可能会给 DAO 受到严重的损失甚至致命的打击。

NFT non fungible token 非同质化代币

代币 独一无二 可追溯 不可篡改
可以将独一无二的数字产品绑定到独一无二的NFT上 NFT相当于这个数字产品的证书
NFT依托于区块链(公链)

比特币是同质化代币,可以分割。NFT无法互相替代

数字产品放在区块链上,就可以提供区块链提供所有权证明,并且无法篡改和复制。

gas

虚拟机根据交易中确定的一个一个的操作指令进行逐个处理,而每个操作指令都有明文规定的Gas消耗量。你所需支付的手续费等于gasPrice * gasUsed。
交易燃料费将归属于挖出本区块的矿工。当矿工挖矿时,他需要决定哪些交易放入到区块中,可以随机选择交易, 也可以不包含任何交易。为了鼓励让矿工将你的交易放入区块,你会考虑将燃料单价设置得足够诱人,已确保能优先放入区块。
作为验证交易成本的一种度量。
这些交易包括加密互换、交换、交易、加密转移等。gas概念有助于区分ETH加密货币的实际价值和用于验证以太坊区块链交易的计算能力成本。

区块链流程 deep drive

wallet login 钱包登录

用户的 生物信息 -》 助记词 《-》 私钥 -》 wallet contract 钱包合约 -》 合约
fuzzy extractor 指纹 声音 面部 基因 等等
pin 和 设备id 绑定

benefit 提升用户体验
approach

创作者激励 incentive program for creator economy

NFT MCN

Gnosis Safe 数字资产管理工具

is the most trusted platform to manage digital assets on Ethereum.

world state 全局状态

账户地址 和 账户状态 之间的映射是全局的,存在Merkle Patricia tree的二叉树数据结构中.
节点属性
包含底层数据的树底部的大量叶节点

EVM

EVM能够运行智能合约,这些合约可以表示金融协议,例如;期权合同、掉期或息票支付债券。它还可用于执行赌注和下注、履行雇佣合同、充当受信任的角色;托管 ;用于购买高价值物品,并维持合法的分散赌博设施。这些只是智能合同可能实现的几个例子,替代各种法律、金融和社会协议的潜力令人兴奋;

createWallet的流程

address的本质是什么?为什么他能够不被盗窃?

keyring_ hd_keyring_ hd_key 的区别
hd的含义是hierachical deterministic 层次确定的
hd_keyring_ : root_ master_key_ accounts_ imported_accounts
hd_key : depth_ index_ private_key_ public_key_ chain_code_ secp256k1_ctx_

助记词如何保证没有重复?

CreateKeyring
GenerateMnemonic : use bip39.c worldlist.c random.c bcrypt.h generate mnemonic
GenerateRandom(entropy, entropy_size);
mnemonic_from_bytes : use random number to generate mnemonic
CreateKeyringInternal
MnemonicToSeed 64
DeriveKeyPbkdf2HmacSha512 : mnemonic as password, with salt and iterations to get derived_key
Pbkdf2Core->BCryptDeriveKeyPBKDF2
ConstructRootHDKey : with seed and kEthRootPath
HDKey::GenerateFromSeed : use seed generate private_key_ and
HmacSha512 HmacCore
将hash出来的值,一半用于private_key_,一半用于chain_code_
GeneratePublicKey
secp256k1_ec_pubkey_create secp256k1_ec_pubkey_serialize
DeriveChildFromPath
继续生成一个HDKey
GetAccountName
AddAccountForKeyring
addAccounts
DeriveChild bit operation generate child_key
add child_key to accounts_
getAccountPath like m/44’/{coin}
getPublicKeyAndAddress
GetUncompressedPublicKey secp256k1
address FromPublicKey

最后更新于 2023年2月6日 by qlili

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x