3.ERC4626

ERC4626是一个vault,在DAI中,使用ETH换取DAI。其流程为先充值ETH到maker vault。

Vault

  • 资产的管理、分红
  • 用户充值某项资产获取某个凭证
  • 该凭证作为分红、推出的依据
  • Yield Farming/借贷/质押等

以太坊改进提案EIP:ethereum improvemwnt proposal
最初EIP-4626提出想法
4626代码,与最初标准还是有不同,ERC4626是继承ERC20
较好的4626代码分别是solmateopenzepplin

ERC4626

assets & shares

返回金库基础资产代币地址
function asset() external view returns(address assetTokenAddress);
返回金库管理的基础代币总额
function totalAssets() external view returns(uint256 totalManagedAssets);

需要注意的是,在ERC4626中规则中,一个vault只能管理一个代币

数量估计
function convertToShares(uint256 assets) external view returns(uinr256 shares);
function convertToAssets(uint256 shares) external view returns(uint256 assets);

充值资产,获取share

function maxDeposit(address receiver) external view returns(uint256 maxAssets);
function previewDeposit(uint256 assets) external view returns(uint256 shares);
function deposit(uint256 assers,address receiver) external returns(uint256 shares);
function maxMint(address receiver) external view returns(uint256 assets);
function mint(uint256 shares,address receiver) external returns(uint256 assets);

返回shares,拿回资产

function maxWithdraw(address owner) external view returns(uint256 maxAssets);
function previewWithdraw(uint256 assets) external view returns(uint256 shares);
function Withdraw(uint256 assets,address receiver,address owner) external returns(uint256 shares);
function maxRedeem(address owner) external view returns(uint256 maxShares);
function previewRedeem(uint256 shares) external returns(uint256 assets);
function Redeem(uint256 shares,address receiver,address owner) external retuens(uint256 assets);

总结如下:erc4626

两个事件

event Deposit(address indexed sender,address indexed owner,uint256 assets,uint256 shares);
event Withdraw(
	address indexed sender,
	address indexed receiver,
	address indexed owner,
	uint256 assets,
	uint256 shares
);

Front-Running

区块链交易在发布之后和正式上链之前,交易存在交易池中。矿空会根据优先级打包交易。
Front-running是指在金融交易中,某人或机构在知道客户即将进行大额交易的情况下,趁机在交易执行之前,以自己或自己所代表的利益进行相同或相似的交易。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ERC20代币合约中的`toggle`函数是用于切换是否需要签名的函数。如果该函数被调用,那么代币转移交易就不需要经过用户的签名确认,而是直接由智能合约执行。这种方式可以用于一些特殊场景,比如允许信任的第三方执行代币转移交易,或者在某些情况下需要快速执行代币转移交易等。 使用Toggle函数需要满足以下条件: 1. 合约的owner需要调用该函数进行切换。 2. 调用该函数需要提供owner的签名,以验证调用者的身份。 使用web3.js调用Toggle函数的示例代码如下: ``` // 假设以下变量已经定义并初始化 // ERC20代币合约的地址 var tokenAddress = "0x1234567890123456789012345678901234567890"; // 合约owner的地址和私钥 var ownerAddress = "0x1122334455667788990011223344556677889900"; var ownerPrivateKey = "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"; // web3.js provider var web3Provider = new Web3.providers.HttpProvider("http://localhost:8545"); // 实例化web3.js对象 var web3 = new Web3(web3Provider); // 实例化ERC20代币合约 var tokenContract = new web3.eth.Contract(tokenAbi, tokenAddress); // 调用Toggle函数 function toggleSign() { // 判断是否为owner tokenContract.methods.owner().call().then(function (result) { if (result === ownerAddress) { // 构造toggle函数的参数 var data = tokenContract.methods.toggle().encodeABI(); // 对参数进行签名 var hash = web3.utils.soliditySha3({type: 'address', value: tokenAddress}, {type: 'bytes', value: data}); var sig = web3.eth.accounts.sign(hash, ownerPrivateKey); // 构造调用参数 var payload = '0x' + data.substring(2) + sig.r.substring(2) + sig.s.substring(2) + sig.v.toString(16); // 调用ERC20代币合约的方法 tokenContract.methods.toggle().send({from: ownerAddress, data: payload}).then(function (result) { console.log(result); }).catch(function (err) { console.error(err); }); } else { console.error("Not owner"); } }).catch(function (err) { console.error(err); }); } ``` 在上述示例中,我们首先实例化了web3.js对象和ERC20代币合约,然后定义了一个toggleSign函数,用于调用Toggle函数。在toggleSign函数中,我们首先通过调用owner函数,判断调用者是否为owner。然后,我们构造Toggle函数的参数,并对参数进行签名。最后,我们将签名后的参数和Toggle函数的selector合并,构造调用参数,然后调用ERC20代币合约的方法。在调用Toggle函数时,如果签名验证通过,那么代币转移交易就可以不需要经过用户的签名确认,直接由智能合约执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值