`
文章列表

solidity

一.solidity 1.EVM 不是基于寄存器的,而是基于栈的,因此所有的计算都在一个被称为栈(stack)的区域执行,最大有1024个元素,每个元素长度是一个字(256位) 1.1.收到一个区块时,会遍历里面的所有交易,然后将交易进行applyMessage 1.2.取出当前的状态数据库,判断交易是转账还是合约交易 1.3.进到evm后,会先设置一个快照,方便revert后,undo回到快照. 1.4.对合约进行预编译判定,如果有预编译,则由可以执行合约 1.5.如果没有预编译,则由解释器对合约进行解释执行,通过本地的jump_table,取出对应的每一个"脚本"的执行函 ...

tornado

    博客分类:
  • defi
tornado:当用户将资金放入资金池(也称为存款)时,会生成一张私人票据。该私人笔记用作用户以后访问这些资金的私钥。要提取它们,同一用户可以使用不同的地址——旧地址或新地址——并通过这个私钥收回他/她的资金 存钱 5.1 链下计算好一个secret给用户,拥有这个数据相当于有提款的权利 5.1 链下计算要提交的数据(commitment) const preimage = secret + nullifier; const commitment = pedersenHash(preimage); 5.2 存钱的时候将byte32的commitment数据上传,并将其作为叶子节点插入到一个M ...

opensea

    博客分类:
  • defi
opensea:其中链下的订单簿负责存储用户的挂单信息,并对订单进行撮合。最终的成交和转移 NFT 是由 Seaport Protocol 来负责的。 Seaport 采取了一种不同的方法:offerer 可以同意提供一定数量的 ETH/ERC20/ERC721/ERC1155 项目--这就是 offer。为了使该offer被接受,offerer必须收到一定数量的物品,这就是 consideration。 当 offer 是 ERC721/ERC1155 的时候,offerer 就是卖家,卖出 ERC721/ERC1155 来换取 ETH/ERC20。 当 offer 是 ETH/ERC20 ...

Address

// contracts/Box.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/Address.sol"; import "hardhat/console.sol"; contract MyTestContract { function foo(uint i) view external { console.log("foo",i); ...

gmx协议

    博客分类:
  • defi
9.gmx:去中心化AMM合约交易所,在Arbitrum和Avalanche网络发行版本,最高允许30倍杠杆.同时也支持swap,只不过用的是预言机的价格,所以没有无偿损失 9.1 用户类型: 散户和lp提供者,相当于散户和lp对赌的期货合约交易所,因为做合约输的机 ...

lido

    博客分类:
  • defi
8.Lido 8.1 Lido收集到用户的 ETH 后,会每次在以太坊智能合约上质押32个ETH,DAO就会从治理控制的注册表中选择一个新的验证者。然后调用存款合约,将32个ETH 分配给该验证人,并生成 Lido DAO 的提款凭证。 8.2 在Lido 中,stETH 持有只能获得以太坊2.0质押奖励的 90%,5%分配给 Lido 的节点运营商,5%给Lido金库 8.3 Lido的stTokens有两个版本,分别是stETH和wstETH。这两种代币都是 ERC-20 代币,但它们以不同的方式反映了应计的质押奖励。 stETH 实施变基机制,这意味着 stETH 余额会定期增加。 wst ...

dydx

    博客分类:
  • defi
7.dydx采用链下撮合链上结算的订单稀释模式,架设在以太坊二层网络Starkware上,采用了StarkEx交易引擎,实现了资产的去中心化自托管 7.1 订单簿模式,下单和挂单是中心化的 7.2 在安全和私密性上,Starkware的二层技术通过零识证明提高了安全性和隐私性,引擎不开源,去中心化程度不高 7.3 需要创建账户和充值usdc,eth...,项目方和coinbase有一定关链,使用的是usdc,杠杆最高20倍 7.4 项目方通过交易手续费获得收入,手续费比例最高为0.1%,可通过质押平台代币获得折扣,项目也通过交易挖矿等手段来激励交易量。交易挖矿会持续存在,每月为一个纪元,会有固定 ...

Beacon

Beacon a.Implementation地址并不存放在Proxy合约里,而是存放在Beacon合约里,Proxy合约里存放的是Beacon合约的地址 b.在合约交互的时候,用户同样是和Proxy合约打交道,不过此时因为Proxy合约中并未保存Implementation地址,所以它要先访问Beacon合约获取Implementation地址,然后再通过delegatecall调用Implementation。 c.在合约升级的时候,管理员并不需要和Proxy合约打交道,而只需要交互Beacon合约,把Beacon合约存储的Implementation改掉就行了。 d.就是多个Proxy共享 ...

UUPS

a.Proxy直接把所有的请求都通过delegatecall丢给Implementation(如果是升级,Implementation的升级函数会确认一下是否为管理员) b.需要实现_authorizeUpgrade函数以确保只有管理员账户可以进行升级 c.升级函数upgradeTo在Implementation合约中 // SPDX-License-Identifier: MIT pragma solidity >= 0.8.0; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializab ...

Transparent

Transparent: a.如果Proxy合约发现自己被ProxyAdmin合约调用,那么它会调用自身的函数代码;如果调用者是ProxyAdmin之外的账户,那么它会通过delegatecall去调用Implementation的代码。这样就保障了合约升级的安全性。 b.升级函数在proxy里面,proxy里面的函数基本都有ifAdmin修饰符校验 TransparentAdmin.sol // SPDX-License-Identifier: MIT pragma solidity >= 0.8.0; import "@openzeppelin/contracts/ ...

string转bytes

const data = Buffer.from('');//string转bytes let a = ethers.utils.formatBytes32String("6"); //string转bytes32

hardhat命令

1.前置准备,运行一个新项目 mkdir my-project cd my-project npm init --yes npm install --save-dev hardhat@2.8.2 -g npm install --save-dev @nomiclabs/hardhat-truffle5 @nomiclabs/hardhat-web3 web3 2.console.log 适用于view,但不适用于pure,最多调用uint,string,bool,address4个参数 3.编译 npx hardhat compile 强制编译 npx hardhat compile --f ...

compound

    博客分类:
  • defi
2.compound 2.1 存钱:不会1:1给ctoken,是1:50左右的比例,最开始是1/0.02,把用户转账过来的token存到资金池里,根据当前时刻的汇率给用户发放cToken 2.2 抵押系数:对于抵押品cToken来说每个市场都有一个抵押系数(Collateral Factor,或者叫抵押 ...

aave

    博客分类:
  • defi
aave:去中心化借贷系统,aave借款人必须先提供抵押品才能借款。此外,他们只能借到他们发布的抵押品的价值。 1.用户抵押获取1:1的aToken,作为凭证.并且aToken无法交易 2.当用户从协议中贷出资产,获得 1:1 数量的 debt tokens.其中包括稳定利率债务币和浮动利率债务币 (usersStableRate * currentBalance + amount * rate) / (currentBalance + amount) 2.1 固定利率借贷:用户以固定利率借贷资产,将以当前固定利率来计息,不随市场波动,但不同时间贷款的固定利率可能是不同的,任何人每借一次钱, ...

multicall

multicall的solidity调用与ethers.js调用 // contracts/Box.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/Multicall.sol"; import "hardhat/console.sol"; contract TestMulticall { function testMulticall(address addr) external ...
Global site tag (gtag.js) - Google Analytics