javascript
如何切到uni v3
Uniswap v3的概述。我们的目标是在 2021年5 月 5日推出 L1 以太坊主网,不久之后将在Optimism 上部署 L2
代币怎么交换
NFT怎么流转, 手续费怎么转给自己
javascript
智能合约开发人员//– 致力于后端智能合约,开发核心数字处理功能,这些功能需要完美,没有错误的余地。智能合约开发人员通常会在 Solidity 中为基于 Ethereum 或 Rust for Solana 的任何东西工作。
智能合约审计员//——专注于安全和防止资金损失。审核员将评估代码、寻找边缘案例并使用模糊器等工具进行评估。
Web3 开发人员//——创建一个网站或 dApp 前端,连接到钱包(如 metamask)并与底层智能合约交互。Web3 开发人员通常有一些 webdev 经验,并且会使用 Javascript 来解决主要的复杂性。
- 学习区块链的基础知识
- 什么是去中心化应用程序?
- 区块链上的软件:智能合约
- 学习 Solidity 来开发和部署智能合约
- 成熟的 Web3 开发者路径
- 通过构建项目来学习 Solidity – Buildspace
- 通过创建僵尸来学习 Solidity
- 连接你的 DApp 前端:学习 Web3.js 或 Ethers.js
13.1 学习 Web3.js
13.2 学习 Ethers.js
14 - 学习炼金术 将 Alchemy 视为区块链中的 AWS
15 – 学习 Remix IDE
- 开发你的第一个 Web 项目
- 学习安全帽
- 学习松露和甘纳许
- 学习如何测试你的智能合约
如何测试我的去中心化应用程序?
快速创建 DApp,学习 Moralis。
结论
javascript
区块链(也叫公链)1.0(只是货币2008)->2.0(存各种数据/合约2014)->3.0解决性能问题(2017)
1.0
Merkle Hash是把一系列数据的哈希根据一个简单算法变成一个汇总的哈希
UTXO:还没花的钱
2.0
以太坊//区块头部有三个MPT树根(状态/交易/数据)
以太坊layer1已经变得过于昂贵,目前合同部署成本已经达到数千美元。
对此的解决方案是使用与以太坊相同的代码库和 EVM(因此 Solidity 代码也适用)
但具有不同程度的去中心化的第三方方项目, layer2:
Arbitrum Optimism Avax Binance Smart Chain
Polygon Matic Fantom ZKsync Moonriver
HECO Huboi Eco Chain Cronos
3.0
EOS IO 是一个高性能的开源区块链平台,旨在支持和运行安全、合规和可预测的数字基础设施。
NEO 是中国第一个公链项目。它也被称为中国的以太坊,由发展智能经济的愿景驱动。NEO dApps 生态系统是该平台的最强命题。
波卡//要做各种区块链的操作系统 发行DOT, 自称layer0, 可以链接各个layer1
支持任何类型的数据或资产的跨区块链传输
通过启用一组通用的验证器来保护多个区块链,通过在多个并行区块链上传播交易来提供交易可扩展性。
其下一代'提名权益证明' (NPoS) 只消耗了传统区块链使用的一小部分能源。
治理系统所有利益相关者都有发言权。网络升级在链上协调并自主实施,无需分叉网络
发行DOT目的:
治理//Polkadot 代币持有者可以完全控制协议。其他平台上矿工专有的所有特权将授予中继链参与者(DOT 持有者),包括管理协议升级和修复等异常事件。
质押//博弈论激励代币持有者以诚实的方式行事。这种机制会奖励好的参与者,而坏参与者将失去他们在网络中的股份。这可确保网络保持安全。
粘合//通过绑定代币添加新的平行链。通过移除绑定代币来移除过时或无用的平行链。这是权益证明的一种形式。
中继链 //主链,像插排, XCMP协议类似TCP/IP协议
平行链 //插在中继链上
平行线程 //临时插在中继链上
桥接链 //插排转接头
角色:
提名者//选民 选出验证者
验证者//矿工 //中央公务员
搜集者 //地方公务员 搜集平行链中内部交易交给验证者
钓鱼者 //纪检监察人员 监察验证者
以太坊是最大的区块链开发平台,是世界计算机
内置开发语言solidity,内置js接口(web3.js)
以太坊有多条公链,一条主要的区块链,和若干条用于挖矿和测试用的区块链
'智能合约'是跑在以太坊平台上的自动化程序, 是一个可以存储一段代码的账户,相当于物理世界的ATM机
'叔块'是比别的块慢一点而没被纳入主链的块, 是个分叉
以太坊区块收入
普通区块收入
—固定奖励(挖矿奖励),每个普通区块都有
—区块内包含的所有程序的gas 花费的总和
gasLimit是指该次交易最大消耗gas
gasPrice是指你愿意为实际消耗的gas出多少价格
—如果普通区块引用了叔块,每引用一个叔块可以得到固定奖励的1/32
叔块收入
叔块收入只有一项,就是叔块奖励,计算公式为:叔块奖励= ( 叔块高度+ 8 –引用叔块的区块高度) * 普通区块奖励/ 8
外部账户:即普通用户用私钥控制的账户;//EOA:External Owned Account
合约账户:一种拥有合约代码的账户,它不属于任何人,也没有私钥与之对应。
账户数据构成:
nonce//一个递增的整数记录的就是交易次数
balance//账户余额
storageRoot//合约账户特有,存储合约相关的状态数据
codeHash//合约账户特有,存储合约代码的Hash
三种交易
转
创建
调用//合约交易就是指一个外部账号调用某个合约的某个public函数
MEV:矿工权利太大,知道用户的汽油费,以更高的汽油费抢在用户之前套利
Geth//以太坊客户端的“官方”实现, 可以搭建本地私链,搭建本地的测试网,这样调试起来很快
ETH3.0
整个网络分成64个'分片链区块'+1个'信标链区块'
信标链的共识机制Casper(PoS的一种)
比PoS多了惩罚机制,通过保证金和下注正确的链, 防止故意分叉获得双重奖励
协议实验室
发布了IPFS星际文件系统
发布了FileCoin
代币Token
ERC20同质化(可替代):比如 币安币,狗币,比特币
ERC777标准试图改进广泛使用的ERC-20 代币
ERC721非同质化(non-fungible):比如数字艺术品
ERC1155改进了它,使一个合约可以发任意种类的NFT
MetaMask//是远程客户端,自己作为一个区块链的一个节点身处在区块链中代替我们去交易,自己本地搭建为节点太麻烦了
@OpenZeppelin //是一组用 Solidity 编写的经过良好测试的npm库,您可以将其导入您的智能合约,而代码可能由 truffle 生成、维护和部署。
Alchemy / infura//公共节点服务提供商, 不用自己搭建一个以太坊节点
三个智能合约开发框架:
Hardhat //在本地运行 Solidity无需处理实时环境即可轻松部署您的合约、运行测试和调试 Solidity 代码。当事务失败时,您会获得 Solidity 堆栈跟踪、console.log 和明确的错误消息。
//Hardhat Network 是一个为开发而设计的本地以太坊网络。 npx hardhat init
区块链:Hardhat运行时环境/本地、测试网、主网
测试支持:
trufflesuite.com//用于开发智能合约的工具,使用以太坊虚拟机 (EVM) 的世界级区块链开发环境、测试框架和资产管道,旨在让开发人员的生活更轻松。
区块链:Ganache /本地,测试网,主网
//Ganache 是模拟区块链,能够让我们的程序在开发环境中运行。它既可用作桌面应用程序,也可用作命令行工具(以前称为 TestRPC)。
//合约对象可以直接在控制台使用
npm i truffle -g
truffle version//Truffle v5.4.33 (core: 5.4.33) Ganache v7.0.1 Solidity v0.5.16 (solc-js) Node v12.14.1 Web3.js v1.5.3
truffle init //migrations文件夹告诉如何部署, 1_initial_migrations.js不用管它,自带的, 自己在2_xxx_xx.js里写部署的东西
truffle-config.js//配置编译器, 要发布的网
truffle compile//保证用的语法版本相互兼容后,构建后的物件都在build文件夹,abi的json文件都在build/contracts,给前端的ether.js等调用
truffle develop//启动内建版本的Ganache在127.0.0.1:9545, 提供了10个有eth的钱包给你调试
migration --rest
truffle migrate --reset --network 'truffle-config.js里配置的测试网名称'
truffle console --network ropsten
//操作发布到测试网的合约
s = await 合约名称.deployed()// s.address
await s.合约里的方法() //返回tx回执
Aave,Dy/Dx,Kollateral,uniswap 都有提供闪电贷
ethers.js //是简单版的web3.js
wallet = new ethers.Wallet(privateKey, new ethers.providers.InfuraProvider)
contract = new ethers.Contract( addressOrName, contractABI.abi, wallet );
contract.合约里的方法();
contract.callStatic.合约里的方法(); //等同于 web3的contract.methods.合约里的方法().call();方法
javascript
EVM是以太坊虚拟机, 由一部分一部分组成整个世界虚拟机,负责执行程序,进行以太坊状态转换
将solidity编写的代码转为字节码和接口规范ABI, 通过交易部署到区块链网络中
返回的参数名词是什么取决于abi里面写的是什么,可以随便改!
DApp去中心化APP组成:
1.区块链上的智能合约(放处理逻辑)
2.web前端界面//通过web3.js+接口规范ABI去调用合约里的函数去操作数据
Solidity
getter会在声明public变量自动生成的
constructor在创建合约时触发一次
1000000000000000000代表 1 个 ETH,小数点后 18 位
内置变量
msg.sender//交易的发件人地址, 代表调用者
block
tx
address//20字节 address payable是可以发送以太的地址
//balance
address(this).balance
//transfer
address payable x = payable(0x123);
x.transfer(10); //失败时回滚
//payable(x).send(10) returns false; 失败时返回false
一个合约怎么调用另一个合约//把它的接口合约继承下来
合约之间的调用有2种方式: 底层的call方式和 new 合约的方式
call,delegatecall,staticcall使用要非常小心,低级方法(重入风险)
call:通过合约ContractAddres.call(编码后的方法名和参数),返回调用是否成功,以及返回值data
已弃用value(...),gas(...)
赞成{value: xx}和{gas:xx.}
target.call{value: xx}(data); 等同于target.call.value(xx)(data);//给目标发xx个以太币
delegatecall :设计是为了调用其它合约的API用的,类似于 Copy了API合约的API函数到本地合约执行,会修改调用者合约的状态变量。
staticcall: 由于也可以使用拜占庭静态调用。这与call基本相同,但如果被调用函数以任何方式修改状态,则会恢复
uint === unit256 8-256 fixed浮点 bytes1/2/3../32
modifier //aop用的,可以限定某方法只能发布者调用等
send(),transfer(),)如果你今天收到一笔ether,这个时候会去调用原本合约的receive或fallback函数
使用“receive”关键字定义的接收以太函数//0.6以后,如果存在,只要调用数据为空(无论是否接收到以太),都会调用
使用“fallback”关键字定义的后备函数//调用了所有不存在的函数将调用它
external function //类似public,只是它要this.f()去调用, 区别是它内存被复用,没有memory copy操作,效率高
pure 不读写 view只读
javascript
ICO:更像是发行一种虚拟代币,与股票差别在于不影响经营权,类似IPO,是用来筹钱的
ERC:Ethereum Request for Comments
零知识证明:比如我自己拿钥匙去开仓库拿出货品给你看,没给你钥匙的情况下还能证明我真的有钥匙
隔离见证:为了使区块链能存更多的东西,把普通用户用不到的 用于矿工在打包区块的时候用来验证每笔交易合法性的 '交易数字签名信息'拿出去
预言机:向智能合约输入或输出信息的源,如比特币价格信息网站,公共数据库
区块链+
DeFi//LINK
点对点撮合代表项目:Dharma
稳定币模式代表项目:MakerDAO发行DAI
流动池交易代表项目:Compound
//流动性挖矿=收益农耕
//AMM自动'做市商(也叫流动性提供者LP)'解决流动性问题
//问题,无常损失(IL)即我去交易比我不交易亏的钱
Uniswap//x*y=z恒定乘积做市商CPMM, 为任何代币增加流动性
Uniswap 平台由 3 个组件组成:“factory”、“router”和 N 个“pair's”
每个pair智能合约都管理一个由两个代币储备组成的流动资金池
滑点 = Price Slippage = Price Impact:您的交易将对该代币对的市场价格产生影响。在 ETH/DAI 等大型矿池中,小额交易对价格的影响可以忽略不计。但是,如果您进行大量交易或交易流动性低的代币对,那么价格影响可能会很大,并导致整体价格下降。
無常損失越大,滑点越小;無常損失越小,滑点越大。
Uniswap v3 版本中,和 v2 一样也有两种闪电贷的方式,但是是通过不同的函数接口来完成的。
第一种是普通的闪电贷,即借入 token 和还贷 token 相同,通过 UniswapV3Pool.flash() 完成 //IUniswapV3FlashCallback(msg.sender).uniswapV3FlashCallback(fee0, fee1, data);
第二种是类似 v2 的 flash swap,即借入 token 和还贷 token 不同,这个是通过 UniswapV3Pool.swap() 来完成的。//IUniswapV3SwapCallback(msg.sender).uniswapV3SwapCallback(amount0, amount1, data);
Kyber 动态做市商 (DMM) (dmm.exchange) 现已更名为KyberSwap, 是下一代多链 AMM 协议,可通过其放大的池最大限度地利用流动性提供者的资金,提供高资本效率和优化回报的动态费用。
Yearn.finance//在多个DeFi组织间借还实现自动最大化套利
匿名币//XMR
物联网//IOTA
平台币//HT
共识算法:
-> proof of work
-> POS:proof of stake, 取决于币龄(币数*持有时间)
-> DPOS:股份授权证明机制,比POS多了人大代表
1. 工作量证明(PoW,Proof of Work)
2. 权益证明(PoS,Proof of Stake)
//3. 延迟工作量证明(dPoW,Delayed Proof-of-Work) //两种类型的节点:公证人节点和正常节点
4. 授权权益证明(DPoS,Delegated Proof-of-Stake)
5. 实用拜占庭容错算法(PBFT:Practical Byzantine Fault Tolerance)
//6. 授权拜占庭容错算法(dBFT,Delegated Byzantine Fault Tolerance)
//7. 权威证明(PoA,Proof-of-Authority)
//8. 所用时间证明(PoET,Proof of Elapsed Time)
//9. 权益流通证明(PoSV,Proof of Stake Velocity)
//10. 恒星共识(Stellar Consensus)
//11. 活动证明(PoActivity,Proof Of Activity)
Paxos算法分布式一致性算法, 将系统中的角色分为提议者 (Proposer),决策者 (Acceptor),和最终决策学习者 (Learner)//假设了只有恶意节点,没有故障节点
Raft实现了和Paxos相同的功能,将系统中的角色分为领导者(Leader)、跟从者 (Follower)和候选人 (Candidate)
javascript
DLT分布式账本技术
Hyperlegder Fabric //吸收了区块链和以太坊的优点
是实名制的网络
MSP会员服务提供er//是一套验证接口
节点类型:
Peer即普通节点,用来存储和同步账本ledger数据
ledger记录的是world state键值对(包含version),存在couchdb/leveldb里
锚节点//负责通信
client程序员操作的节点用来实例化交易(可用工具SDK: cli, node sdk, java sdk来做到)
orderer矿工节点负责交易确认
Channel即私链/私网
对等节点//eg超级管理员到超级管理员
背书,即节点把执行结果发给SDK去收集,SDK发给order节点去排序去确认
背书策略,即投票策略//决定这个合约在什么情况下才执行/写入账本