blockchain区块链
https://cubic-leaf-731.notion.site/web3-202208-09-1623ccd15c2148a1ae00ed8794d153b1 (https://www.bilibili.com/video/BV1Je4y1r7uB/?spm_id_from=333.999.0.0&vd_source=c2f975abf353677cb814e38e073b6a75)
https://www.bilibili.com/video/BV1Vt411X7JF https://academy.binance.com/zh
https://www.youtube.com/channel/UCRCJkQttdjzJYpbur5Qut6A
https://github.com/yeasy/blockchain_guide 教程
https://learnblockchain.cn/ blockchain learning community
https://learnblockchain.cn/article/3451
必须推荐清华大学出版社的零基础学区块链一书。solidity也得学。 fabric 和fisco至少掌握一种 https://github.com/rust-in-blockchain/awesome-blockchain-rust
Solidity 智能合约
https://github.com/yeasy/blockchain_guide
https://www.zhihu.com/question/20941124/answer/20411491 比特币原理
https://github.com/rust-bitcoin/rust-bitcoin
https://www.liaoxuefeng.com/wiki/1207298049439968
岗位职责 1、负责去中心化金融产品开发和实现 2、负责基于以太坊(或者SOLANA)的区块链智能合约开发 3、跟进以太坊开源技术,建立和维护智能合约方面的的标准化,不断采用业内最佳实践进行持续优化,保证团队的高效率与高质量。 4、持续进行智能合约的性能和安全性优化,能够找出并实现最优方案。需要时与外部团队对接,理解外部团队的改进建议并能做出合理的判断和实现。 岗位要求: 1、精通RUST语言,熟练使用内联编译等方法优化合约的执行; 2、精通智能合约的编写/编译/测试/部署,了解常见的智能合约漏洞,对语言机制有较深入的理解,优秀的安全审计能力,可以有保证地编写安全的智能合约。 3、熟练应用以太坊DApp开发相关的框架及工具,Truffle/Hardhat、Remix。
Substrate 技术专家/高级开发工程师 岗位职责: Substrate runtime 开发
岗位要求: 有相当程度的 Rust 经验(1~3年经验) 熟悉 Substrate 框架 有网络编程、存储系统、密码学背景知识
加分项: 对 WebAssembly 的原理和实践有经验者优先 对 Blockchain 的原理和实践有经验者优先 有加密领域实践经验者优先 对共识原理有理解,有实践者优先 英语听说读写能力好者优先 对社区建设有经验,在Rust社区中有过贡献者优先 对知名 Rust 开源项目(包括但不仅限于密码学、p2p通信、blockchain、分布式存储等项目)有过贡献者优先
1、本科及以上学历,五年以上工作经验,三年区块链开发经验,对Ethereum,Polkadot/Substrate,Cosmos底层有一定了解,了解相关EVM,跨链技术 2. 熟练掌握 Rust 开发语言; 3. 熟悉常见共识算法,如PoW、PBFT、PoS、DPos、Raft等,对零知识证明算法实际经验的优先 4、熟练掌握 Bitcoin、Ethereum、PolkaDot、EOS、HyperLedger、Fabric 等主流区块链技术相关机制和原理; 5、熟练掌握安全体系优化,包括终端、网络、内存、存储和密钥安全管理;低延时系统 6、热爱技术,对代码质量和开发规范有近乎苛刻的要求,善于沟通与团队协作; 熟悉ink开发
熟悉波卡生态项目
1、负责跟踪区块链前沿技术动态,如:隐私,去中心存储,跨链,DID,承担核心代码开发; 2、负责区块链在金融(defi)等领域落地的技术解决方案研究;如compound、filda、uni swap、sushi swap等,熟悉了解solana、波卡(polkadot)等生态和开发语言; 负责智能合约的开发,根据产品求开发基于solana、polkadot等智能合约产品; 1、熟悉了解如下技术:P2P网络,密码学,共识算法(如BFT系列、PoX系列、Paxos,Raft、pow,pos, dpos )等 2、具备1-3年区块链底层技术研发经验,主要是solana、polkadot、Ethereum,CITA,Fabric等公链和联盟链项目; 3、熟悉了解 Bitcoin,Ethereum,CITA,Fabric等主流区块链技术以及相关机制原理;对波(polkadot)卡和solana上面的系统有较深入的研究和实际开发应用经验,有成功开发上线经验优先 4、熟悉Linux,熟练掌握Rust,C++,、GO、Java等主流区块链系统开发语言一种或几种;
1、Substrate或其他区块链节点开发经验 2、有可信执行环境应用开发经验:Intel SGX、AMD SEV、Arm TrustZone 3、扎实的应用密码学知识:非对称加密、零知识证明、多方安全计算 4、跨链桥(比特币SPV节点)、Layer 2 开发经验(核心协议方向) 5、Solidity、Ink等智能合约开发经验(区块链开发方向) 6、FaaS、Serverless、Event Sourcing实施经验(计算平台方向) 7、分布式系统任务调度、分布式事务、分布式存储等基础设施的开发经验(计算平台方向) 方向职责 核心协议 1、Intel SGX SDK 开发与整合 2、P2P网络通信与密钥管理 3、XCM 跨链协议整合 4、对接 Filecoin 等分布式存储协议 保密合约基础设施 1、WASM、Ink! 执行环境的整合、优化、Chain Extension 开发 2、调研和改进合约编程模型 3、WASM 工具链的整合 区块链开发 1、设计与实现 Substrate Pallet 2、Ink! 合约研发、测试与部署 3、不同场景下的 XCM API 设计与实现 计算平台 1、构建兼容工业标准的 Serverless、FaaS 基础平台 2、开发与移植应用,并测试平台的可用性
加分项
- Substrate或其他区块链平台开发经验
- Solidity、Ink等智能合约开发经验(区块链开发方向)
- 了解分布式系统和P2P应用的开发
2 年以上 Golang 开发按经验 有 Gin, Beego, Iris 其中之一或者多个的使用和开发经验 了解分布式架构体系、容器技术、容器编排技术相关的设计理念 有关系型数据库和 NoSQL 数据的开发使用经验 熟悉持续交付和持续集成相关工具和技术 熟悉区块链底层技术、共识算法,熟悉 Solidity 熟悉区块链相关的测试、调试、部署相关工具( e.g.Truffle/Embark ) 有 Substrate, Ethereum, Solana 其中之一或者多个的使用和开发经验 了解分布式架构体系、容器技术、容器编排技术相关的设计理念 有关系型数据库和 NoSQL 数据的开发使用经验 熟悉持续交付和持续集成相关工具和技术 熟悉区块链底层技术、共识算法,熟悉 Solidity 熟悉区块链相关的测试、调试、部署相关工具( e.g.Truffle/Embark )
语言
cpp : 密码学库成熟
bitcoin, zcash(基于隐私的, 从 比特币改的), ethereum (以太坊)
golang: 语法简单, 语法层面支持并发
fabric, ethereum, ipfs
rust: 性能强, 类型系统强, 表达能力强, 和 c 无缝交互
Parity/Substrate (以太坊实现), zcash (Parity 公司是 rust 区块链先行者公司)
Haskell: 强大的类型系统 , 在编译期就可以暴露很多错误
cardano, Dfinity
js
kotlin
Python
区块链简介
区块链 采用密码学的方法来保证己有的数据不可篡改,采用共识算法为新增的数据达成共识 , 这完 全是与生俱来的且去中心化的“公信力”
三元悖论
https://www.jianshu.com/p/934226233098
开源库
数据库 parity-rocksdb
大数库 numext bigint
p2p 库 rust-libp2p
vm 库 ckb-vm cita-vm
签名算法 libsm secp256k1
密码学
哈希算法 (摘要算法)
collision resistance 碰撞免疫(很难找到另外的输入得到相同的 hash 输出)
hiding (无法反推原始输入)
该性质的作用:和collision resistance 结合在一起,用来实现digital commitment(又称为digital equivalent of a sealed envelope): 把预测结果作为输入x,算出一个哈希值,讲哈希值公布,hiding让人们知道哈希值而不知道预测值,最后再将x公布,因为有collision resistance的性质,预测结果是不可篡改的。
puzzle friendly (即很难按需求构造有特定特征的 hash 输出, 只能通过穷举大量的输入来暴力尝试)
所以被用来作为 proof of work(工作量证明 pow), 即挖矿, 挖矿很难,验证很容易。(difficult to solve ,but easy to verify)
比特币挖矿的过程中实际就是找一个nonce,nonce跟区块的块头里的其他信息合一起作为输入,得出的哈希值要小于等于某个指定的目标预值
签名算法
asymmetric encryption algorithm 非对称加密
发送消息时, 使用对方公布的公钥加密消息, 接收消息时, 使用自己的私钥解密消息
创建比特币账户, 就是在本地产生一对公私钥, 公钥==账户, 私钥==密码, 执行交易就用私钥对数据进行签名, 其他人可以用我的公钥进行验证
p2p 网络
高可用
高性能
加密货币 crypto concurrency
比特币
简介
区块链鼻祖: 比特币 (a use case for block chain ) --- 去中心化, 防篡改的账本
08 年, 论文 -> Bitcoin: A Peer-to-Peer Electronic Cash System
原理:
- 用户发起交易请求, 用户节点上的 bitcoin program 发出节点交易广播
- 矿工节点收到数据, 求解难题, 打包成区块, 发出区块广播
- 各个节点将区块加入本地链条末尾
https://book.8btc.com/books/6/masterbitcoin2cn/_book/ https://github.com/tianmingyun/MasterBitcoin2CN/blob/master/SUMMARY.md
bitcoin 使用的 hash funciton : sha-256 (secure hash algorithm)
数据结构
比特币每个区块用 hash pointer 连接, 每个 block 包含的交易是组织成merkle tree的形式
blockchain:
genesis block <--- block <--- block <--- most recent block (有一个尾部哈希指针指向 most recent block)
每个 block 保存有指向前一个 block 的 hash pointer (由 地址+hash摘要组成)
hash 摘要是通过前一个 block 的 hash 值+自身block内容计算出的 (即实现了 tamper evident log), 这就保证了任何 bloc 节点的非法修改都会牵一发动全身, 引发后续节点的连续验证出错
所以某台计算机不必保存整个区块链, 只要记住 most recent block 即可, 需要前面的 block, 找其他计算机要就行了, 要过来后需要计算hash 和本机保存的 hash 对比验证
全节点 full validation node: 包含全量数据的 block, 包括 header 和 body
header 存储了:
该 block 包含的所有 tx 组成的 merkle tree 的 root hash值 (没有交易的具体内容)
协议版本
前一个 block header 的 hash
target & nonce随机数 (用于挖矿,即 H(nonce) <= target)
body 存储了 tx 的具体内容, 是一个交易列表
轻节点 light weight node: 只包括 header的block节点 (比如手机上的钱包里的节点)
merkle tree: 类似 binary tree, 区别是使用 hash pointer 取代普通的 pointer
只需要记住 root hash 值, 就能保证整棵树不被篡改
┌───H() merkle root hash (存在于 blockchain 的某个 block中)
│
│
┌───────▼─────────┐
│ │
│ H() H'() │ hash pointers
│ │
└───┬────────────┬┘
│ │
│ │
▼ ▼
┌────────┐ ┌───────────┐
│ │ │ │ hash pointers
│H() H'() │H() H'() ├────┐
└─┬────┬── └──────┬────┘ │
│ │ │ │
│ │ │ │
┌─────┐ │ │ │ ▼
│tx │◄──┘ └►┌─────┐ ┌─┴────┐ ┌──────────
│ │ │ tx │ │ tx │ │ tx
└─────┘ │ │ │ │ │ │ tx block,交易数据
└─────┘ └──────┘ └─────────┘
tx block: block header (存储 hash) + block body (存储 tx 数据)
merkle proof: 向轻节点证明某个 tx 被写入了 chain, 过程: 自身计算 tx 的 H(), 然后向全节点请求另外一半的 tx 的哈希 H'(), 整合计算出上一级 hash pointer 的 hash, 循环计算直到得到整棵树的 root hash, 和轻节点header 中保存的 hash 比对
比特币系统中每个tx(交易)都包含输入和输出两部分。
输入部分要说明币的来源(防范双花攻击) & 交易发起人公钥 hash
数字货币和纸质货币区别是可以复制,叫作双花攻击 即double spending attack。
输出部分要给出收款人公钥的哈希。
共识协议