Skip to content
目录
javascript
如何切到uni v3
    Uniswap v3的概述。我们的目标是在 2021年5 月 5日推出 L1 以太坊主网,不久之后将在Optimism 上部署 L2
代币怎么交换
NFT怎么流转, 手续费怎么转给自己
javascript
智能合约开发人员//– 致力于后端智能合约,开发核心数字处理功能,这些功能需要完美,没有错误的余地。智能合约开发人员通常会在 Solidity 中为基于 Ethereum 或 Rust for Solana 的任何东西工作。
智能合约审计员//——专注于安全和防止资金损失。审核员将评估代码、寻找边缘案例并使用模糊器等工具进行评估。
Web3 开发人员//——创建一个网站或 dApp 前端,连接到钱包(如 metamask)并与底层智能合约交互。Web3 开发人员通常有一些 webdev 经验,并且会使用 Javascript 来解决主要的复杂性。
    1. 学习区块链的基础知识
    1. 什么是去中心化应用程序?
    1. 区块链上的软件:智能合约
    1. 学习 Solidity 来开发和部署智能合约
    1. 成熟的 Web3 开发者路径
    1. 通过构建项目来学习 Solidity – Buildspace
    1. 通过创建僵尸来学习 Solidity
    1. 连接你的 DApp 前端:学习 Web3.js 或 Ethers.js
  • 13.1 学习 Web3.js
  • 13.2 学习 Ethers.js
  • 14 - 学习炼金术 将 Alchemy 视为区块链中的 AWS
  • 15 – 学习 Remix IDE
    1. 开发你的第一个 Web 项目
    1. 学习安全帽
    1. 学习松露和甘纳许
    1. 学习如何测试你的智能合约
  • 如何测试我的去中心化应用程序?
  • 快速创建 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协议
             平行链 //插在中继链上
             平行线程 //临时插在中继链上
             桥接链 //插排转接头
                角色:
                    提名者//选民 选出验证者
                        验证者//矿工 //中央公务员
                            搜集者 //地方公务员 搜集平行链中内部交易交给验证者
                        钓鱼者 //纪检监察人员 监察验证者

以太坊

js
以太坊是最大的区块链开发平台,是世界计算机
    内置开发语言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//公共节点服务提供商, 不用自己搭建一个以太坊节点

三个智能合约开发框架:

js
三个智能合约开发框架:
    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();方法

DApp Solidity

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)

C1CB023D0C2C4E63B9125BCB89A233A8

Hyperlegder Fabric 吸收了区块链和以太坊的优点

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节点去排序去确认
    背书策略,即投票策略//决定这个合约在什么情况下才执行/写入账本

ACCDADC8CE4A45938AF105931A87BCDB

以太坊 ERC20 波场(TRON) TRC20

钱包地址类似于一个银行账户的账号

订单放上面去

本站总访问量 次 本站访客数 人次

1111111111111111111