当前位置: 首页 > wzjs >正文

门户网站 建设 通知开发公司把已经出售的房子一房二卖卖给股东个人

门户网站 建设 通知,开发公司把已经出售的房子一房二卖卖给股东个人,最佳经验网站,抖音代运营策划方案ERC4626标准 定义: ERC4626 是 ERC20 的扩展,提供了一个标准 API,用于表示单个底层 ERC-20 代币的收益保险库份额; 举例说明:用户通过存入 ERC20 Token,从而获取一定比例的 vToken。在 ERC20 Token 存入的…

ERC4626标准

定义
ERC4626 是 ERC20 的扩展,提供了一个标准 API,用于表示单个底层 ERC-20 代币的收益保险库份额;

举例说明:用户通过存入 ERC20 Token,从而获取一定比例的 vToken。在 ERC20 Token 存入的过程中,会在一定的时间内产生收益。在收益到期后,用户可以通过持有的 vToken 个数,获得一定比例的收益回报;

功能:
  • 存款和提取:用户可以将 ERC20 代币存入保险库,并获取相应的份额代币。用户也可以通过销毁份额代币来提取基础资产。
  • 余额查询:用户可以查询保险库中管理的基础资产总额,以及特定用户地址的存款和提取限额。
  • 转换率:提供将基础资产转换为份额代币,以及将份额代币转换为基础资产的功能。
  • 事件:定义了存款和提取时触发的事件,如 Deposit 和 Withdraw
优点:
  • 代币化:继承了 ERC20,用户在向金库存款时,将获得同样符合 ERC20 标准的金库份额。
  • 更好的流通性:用户可以在不取回基础资产的情况下,利用金库份额进行其他操作,如在 Uniswap 上提供流动性或交易。
  • 更好的可组合性:有了标准之后,用一套接口可以和所有 ERC4626 金库交互,让基于金库的应用、插件、工具开发更容易。
在DeFi领域的使用场景
  • 收益农场:用户可以将代币质押到收益农场,获取利息。
  • 借贷:用户可以将代币出借,获取存款利息和贷款。
  • 质押:用户可以将代币质押参与质押,获取生息的代币。

合约开发

合约说明:合约包含存款,退款、铸造、转换率等功能


// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;import {IERC4626} from "@openzeppelin/contracts/interfaces/IERC4626.sol";
import {ERC20, IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "hardhat/console.sol";contract ERC4626 is ERC20, IERC4626 {/*//状态变量//*/ERC20 private immutable _asset; // uint8 private immutable _decimals;constructor(ERC20 asset_,string memory name_,string memory symbol_) ERC20(name_, symbol_) {_asset = asset_;_decimals = asset_.decimals();}/** @dev See {IERC4626-asset}. */function asset() public view virtual override returns (address) {return address(_asset);}/*** See {IERC20Metadata-decimals}.*/function decimals() public view virtual override(IERC20Metadata, ERC20) returns (uint8) {return _decimals;}/*//存款/提款逻辑//*//** @dev See {IERC4626-deposit}. */function deposit(uint256 assets, address receiver) public virtual returns (uint256 shares) {// 利用 previewDeposit() 计算将获得的金库份额shares = previewDeposit(assets);// 先 transfer 后 mint,防止重入_asset.transferFrom(msg.sender, address(this), assets);_mint(receiver, shares);// 释放 Deposit 事件emit Deposit(msg.sender, receiver, assets, shares);}/** @dev See {IERC4626-mint}. */function mint(uint256 shares, address receiver) public virtual returns (uint256 assets) {// 利用 previewMint() 计算需要存款的基础资产数额assets = previewMint(shares);// 先 transfer 后 mint,防止重入_asset.transfer(address(this), assets*10**18);// _asset.transferFrom(msg.sender, address(this), assets);_mint(receiver, shares*10**18);// 释放 Deposit 事件emit Deposit(msg.sender, receiver, assets, shares);}/** @dev See {IERC4626-withdraw}. */function withdraw(uint256 assets,address receiver,address owner) public virtual returns (uint256 shares) {// 利用 previewWithdraw() 计算将销毁的金库份额shares = previewWithdraw(assets);// 如果调用者不是 owner,则检查并更新授权if (msg.sender != owner) {_spendAllowance(owner, msg.sender, shares);}// 先销毁后 transfer,防止重入_burn(owner, shares*10**18);_asset.transfer(receiver, assets);// 释放 Withdraw 函数emit Withdraw(msg.sender, receiver, owner, assets, shares);}/** @dev See {IERC4626-redeem}. */function redeem(uint256 shares,address receiver,address owner) public virtual returns (uint256 assets) {// 利用 previewRedeem() 计算能赎回的基础资产数额assets = previewRedeem(shares);// 如果调用者不是 owner,则检查并更新授权if (msg.sender != owner) {_spendAllowance(owner, msg.sender, shares);}// 先销毁后 transfer,防止重入_burn(owner, shares*10**18);_asset.transfer(receiver, assets*10**18);// 释放 Withdraw 函数        emit Withdraw(msg.sender, receiver, owner, assets, shares);}/*//会计逻辑//*//** @dev See {IERC4626-totalAssets}. */function totalAssets() public view virtual returns (uint256){// 返回合约中基础资产持仓return _asset.balanceOf(address(this));}/** @dev See {IERC4626-convertToShares}. */function convertToShares(uint256 assets) public view virtual returns (uint256) {uint256 supply = totalSupply();// 如果 supply 为 0,那么 1:1 铸造金库份额// 如果 supply 不为0,那么按比例铸造return supply == 0 ? assets : assets * supply / totalAssets();}/** @dev See {IERC4626-convertToAssets}. */function convertToAssets(uint256 shares) public view virtual returns (uint256) {uint256 supply = totalSupply();// 如果 supply 为 0,那么 1:1 赎回基础资产// 如果 supply 不为0,那么按比例赎回return supply == 0 ? shares : shares * totalAssets() / supply;}/** @dev See {IERC4626-previewDeposit}. */function previewDeposit(uint256 assets) public view virtual returns (uint256) {return convertToShares(assets);}/** @dev See {IERC4626-previewMint}. */function previewMint(uint256 shares) public view virtual returns (uint256) {return convertToAssets(shares);}/** @dev See {IERC4626-previewWithdraw}. */function previewWithdraw(uint256 assets) public view virtual returns (uint256) {return convertToShares(assets);}/** @dev See {IERC4626-previewRedeem}. */function previewRedeem(uint256 shares) public view virtual returns (uint256) {return convertToAssets(shares);}/*//DEPOSIT/WITHDRAWAL LIMIT LOGIC//*//** @dev See {IERC4626-maxDeposit}. */function maxDeposit(address) public view virtual returns (uint256) {return type(uint256).max;}/** @dev See {IERC4626-maxMint}. */function maxMint(address) public view virtual returns (uint256) {return type(uint256).max;}/** @dev See {IERC4626-maxWithdraw}. */function maxWithdraw(address owner) public view virtual returns (uint256) {return convertToAssets(balanceOf(owner));}/** @dev See {IERC4626-maxRedeem}. */function maxRedeem(address owner) public view virtual returns (uint256) {return balanceOf(owner);}
}
# 编译指令
# npx hardhat compile

合约测试

const {ethers,getNamedAccounts,deployments} = require("hardhat");
const { assert,expect } = require("chai");
describe("Treasury",function(){let token;let treasury;let addr1;let addr2;let firstAccount;let secondAccount;beforeEach(async function(){await deployments.fixture(["token","Treasury"]);[addr1,addr2]=await ethers.getSigners();firstAccount=(await getNamedAccounts()).firstAccount;secondAccount=(await getNamedAccounts()).secondAccount;//代币合约const tokenDeployment = await deployments.get("MyToken");token = await ethers.getContractAt("MyToken",tokenDeployment.address);//已经部署的合约交互//金库合约const treasuryDeployment = await deployments.get("ERC4626");treasury = await ethers.getContractAt("ERC4626",treasuryDeployment.address);//已经部署的合约交互});describe("金库合约",function(){it("金库合约测试",async function(){//获取代币的余额const balance = await token.balanceOf(firstAccount);console.log("余额",`${ethers.utils.formatEther(balance)} ETH`);//将代币授权给ERC4626合约await token.approve(treasury.address,balance);//将代币存入金库await treasury.deposit(balance,firstAccount);//获取金库中的代币余额const treasuryBalance = await treasury.balanceOf(firstAccount);console.log("金库余额",`${ethers.utils.formatEther(treasuryBalance)} ETH`);//铸造1000个代币await treasury.mint(1000,firstAccount);//将代币存入金库let treasuryBalance1=await treasury.balanceOf(firstAccount);console.log("金库余额",`${ethers.utils.formatEther(treasuryBalance1)} ETH`);//提款await treasury.withdraw(100,firstAccount,firstAccount);let treasuryBalance2=await treasury.balanceOf(firstAccount);console.log("金库余额提款",`${ethers.utils.formatEther(treasuryBalance2)} ETH`);//赎回await treasury.redeem(900,firstAccount,firstAccount);let treasuryBalance3=await treasury.balanceOf(firstAccount);console.log("金库余额",`${ethers.utils.formatEther(treasuryBalance3)} ETH`);});})})
# 测试指令
# npx hardhat test ./test/xxx.js

合约部署

module.exports = async function ({getNamedAccounts,deployments}) {const  firstAccount= (await getNamedAccounts()).firstAccount;const {deploy,log} = deployments;const MyToken=await deployments.get("MyToken");//获取代币合约地址const TokenAddress = MyToken.address;//代币合约地址const Treasury=await deploy("ERC4626",{from:firstAccount,args: [TokenAddress,"Treasury ETH","TBTH"],//参数 代币地址,name,symblelog: true,})console.log('金库合约地址',Treasury.address)
}
module.exports.tags = ["all", "Treasury"];
# 部署指令
# npx hardhat deploy

总结

以上就是ERC4626标准的保险金库合约从开发到测试再到部署的全部过程,包含了存取款,铸造,转化率等功能,更多,,https://t.me/+_QibemQqIIg1OTY1

http://www.dtcms.com/wzjs/593548.html

相关文章:

  • 盐亭做网站珠海网站设计报价
  • 网站建设 599wordpress网址改坏了
  • 在线商城网站怎么做chatgpt网页
  • 网站权重怎么做网站结构该怎么做
  • 网站建设经济效益凡客旗下商城
  • 类似于微博网站怎么做企业网站seo数据
  • 云南网站建设快速优化广州海珠发布
  • 电子商务网站开发的流程2网站建设公司
  • 增城新塘网站建设wordpress 视频 slider
  • 杭州网站建设维护公司域名注册查询
  • 做企业网站需要用到的软件wordpress付费下载破解版
  • 网站建设丶金手指C排名15网站服务器拒绝连接
  • 做智能网站平台html网站开发基础
  • 小清新 轻音乐网站 wordpress设计工作室营业执照
  • 做窗帘的网站网站开发不懂英语
  • net网站开发教程网站第三方统计代码
  • 网站的产品图片怎样做清晰wordpress 4.8 zh cn
  • 网站建设完成外网无法访问设计师找图网站
  • 企业网站seo点击软件应用商店下载安装
  • 网站开发公司福建做网站 内网怎么映射
  • 网站案例展示关键词排名监控批量查询
  • 遇到钓鱼网站怎么做网站开发报告参考文献
  • 珠海网站建立海口网站开发公司电话
  • 厦门企业网站开发移动网站登录入口
  • 郑州网站优化平台wordpress自定义字段筛选
  • 东营有能做网站优化网站建设工作任务
  • wordpress新建分类目录网络推广seo公司
  • 网站icp备案手续做网站的一般都包维护吗
  • 住房城乡建设局网站首页做内贸的有哪些网站
  • 做网站的步骤流程河北石家庄建设网站