實驗日誌:從零到一,構建可雙向操作的 ETH 抵押穩定幣協議
发布于 2025-07-20 23:50:19(微信公众号导出记录)。
本文来自公众号后台的“导出文章内容”功能。博客正文由导出长图进行本地 OCR 转写,并保留原始排版图用于逐段核对。
原文链接:查看原文
OCR 转写有效文字约 6000 字;代码、流程图和版式以文末原始排版图为准。
正文(本地 OCR 转写)
實验日:零到一,横建可雙向操作的ETH抵押穩定協 vex7ce EI V1ajero 2625年7月20日 23:50 广东 本置验旨在磺建亚验罐一個功能完的、基於以太坊(Sepol1a别试编)的抵挥定赔協。 支持用户抵押ETH以造疆定(NSC),允許用户操逼MSC以素回其抵押的ETH,本设計的 核心是引入了遇度抵押(156%)和健康因子計算,作高基碰的凰险管理機制此文檀記了合约编 离到最終集成测试的完整流程。
一、系统蓝图 (System Blueprint)
本協读由雨個核心智能合的模成,共同宽现其核心功能:
1.HyStableCain.sol(MSC):作為协髮行的福定资。
遵循ERC2θ 標军,代號MSC. 。内置mint()(端造)和 burn()(第跌)方法。 。為碰保货带行權的唯一性與安全性,道雨個核心權限將通通Ownable模式,舞家授予端 核心引辈合的 Engine.sal
1.Engine.sol:作為的核心通畅引擎
抵押品管理:负责接收、镇定和解還用户的ETH括押品。 通度抵押制:强制软行159%的抵押率。即用户抵押倡值$156的资產,最多可锦造 假值$109的硬定常。 。资產造贝回:
- 造(Deposit &Mint):依據用户存人的ETH和Chainlink提供的置時情
格,計算造相感款量的MSC。
- 回(Redeem&Burn):接收用户际的MSC,轨行销级,亚按實時候格計算、返
退封愿價值的ETH 凤隐监控:提供getHealthFactor 視圆函数,允許外部查询任一盒位的健康状况。 核心交互流程量:
- 警流程:
用户->送 ETH-> Engine.sol oEngine.sol->前 ChainLink价格 Eng1ne.sol->融馏通度抵押,計算可造数量 Engine.sol->MyStableCoin.mint()-> 爱送 MSC 至用户地址
- 腹回流程:
o用-> MyStableCoin.approve[) 授槽->Engine.sol 用月-> Engine.sol.redeen() o Engine.sol -> MyStabteCoin.burnFrom() 级用的 MSC oEnginc.sol>叠物 Chainlink俱格,計算愿遣 ETH->豫送ETH 至月乒地址
二、榕资產:MyStableCoin.sol
使用OpenZeppelin ERCz0Burnable 撰展以震现掌化的功能。 源代硼MyStableCoin.sol: // SPDx-License-Identifier: NIT pragna solidity ^0.8.20; inport "(openzeppelin/cantracts/token/ERcza/extensions/ERczoBurnable.5: inport "eopenzeppelin/contracts/access/ownable sol";
-
@title Mystablecoin
-
@dev 一可橘造、可鳞毁的 ERC29 代,由唯一的 Ovner [Engine.sol} 控割
-
/
contract MyStableCoin is ERcza, Ownable, ERczoBurnable { //横造函数,初始化代磨名额、符號和初始Owner constructor() ERC2e(My Stable Coin", “MSc) Ownable(msg.sender) { @dev 播造新案。只能由 Owner 调用。 / functian mint (address to, uint256 amount) public only0wner { _mint(to, onount);
部鲁後得到NyStableCoin合的地址8x7fAa36FD4295569752C192d69eB49F3f:5A45dD
三、榕通:Engine.sol
封装了所有核心繁移逼畅,包括抵押、造、照回和凰险計算。 源代疆 Engine.sol: // SPDX-LIicense-Identifier: NIT pragna solidity ^0.8.28; 1nport "@chainlink/contracts/src/vo.8/interfaces/Aggregatorv3Interface inport "./Nystablecoin.sal"; contract Engine { 就影婴量 /7 Aggregatorv3Interface internal priceFeed; My5tableCoin public mscToken; uint256 publlc constant CoLLATERALIZATIoN_RATI0 - 150; uintz56 private constant FEED_PRECI5I0N = le8; napping(address => uint256) public debtInMSC; 事件 // event CollateralRedeemed(address indexed user, uint256 mscAmount, 造函数 constructor(address _priceFeedAddress, address _mscTokenAddress) { priceFeed = Aggregatorv3Interfacef_priceFeedAddress) : mscToken = MyStableCoin(_mscTokenAddress); function depositAndMint() public payable { require(nsg.value > 0, Hust deposit ETH); uint256 ethPrice = getEthPriceInusd(): uintz56 collateralvalueInUsd = (msg.value * ethPrice) / FED_P ulnt256 anountToMint - (collateralvalueInUsd * 109) / CoLLATER require(anountToMint > 0, Deposit not enough to mint any MSC" collateral [nsg.sender] += msg.value; mscToken.nint (msg sender, amountToMint) : emit CollateralDeposited(nsg.sender, nsg.value); function redeenAndBurn{uint256 _mscAnountToBurn) puhlic { require(_nscAnountToBurn > θ, "Must burn nore than θ HSC); require(debtInMSC[msg sender] >= _mscAnountToBurn, *Cannot bun uint256 ethPrice = getEthPriceInusd(); ulnt256 ethAnountToRedeen - (_mscAnountToBurn * FEED_PRECISION require(collateral[msg-sender] >= ethAnountToRedeem, *Not enou deht InMSC[nsg sender] -= _nscAmountToBurn; collateral[nsg sender] -= ethAmountToRedeen; 4 2 mscTaken burnFrom{msg sender, _mscAnountToBurn) : 13 (bool success, ) = payable(msg.sender) -call{value: ethAnountTol require(success, ETH transfer failed); emit CollateralRedeemed(msg sender, _nscAnountToBurn, ethAmoun 辅助/视盈功能 // functian getEthPrireInusd() public view returns [uint256) { )= priceFccd.latestRoundData[); (, Int price, . ) = priceFeed. LatestRoundData(); return uint(price): function getHealthFactor(address _user) public vlew returns (uint2. uint256 collateralEth = collateral[_user]; uintz56 dcbt = debtInNsC[_user] : 1f (debt == 0) return type(uint256) .nax; uint256 ethPrice = getEthPriceInusd(): uintz56 collateralvalucInUsd = (collateralEth * ethPricc) / FE uint256 debtvalueInUsd - debt; return (collateralValueInUsd + PRECISIoN) / debtvalueInUsd;
部暑後得到Engine合地址Bx735Da4333D1fHef19760F4BA
四、部署、速接與授權(服格按序執行)
此璟颜包含整信熔能购正常工作的開键步器。必须最格按照期序操作和胎罐。
4.1部署 MyStableCoin.sol
1.在 Remix 中,還摄 MyStableCain.sol 合的。
2.贴聚“Deplay”进行部墨。
3.起地址:部署成功後,在“DepLoyed Contracts”区境搜频合的的地址,稍之
為MSC_ADDRESS,
4.2够署 Engine.sol
1,在 Rcmix 中,通捶Enginc.sol 合的。 2,在“DepLoy”按钮无的桶造函数参数输入框中,按顺序填意: _priceFeedAddress 地 ( 0x694AA17693572150E4FAC081bf1f309aDC325306
- (此為Sepolia 密试耀的ETH/USD價格数螺源)
°_nsCTokenAddrcss (地址):粘胎上一步能操的 MSC_ADDRESS.
1.點整“Deploy”进行邮署。
2.靶藜地址:部署成功後,夜 Engine 合的的地址,属之為 ENGINE_ADDRESS.
4.3罐授:移交所有
- 原因明:此步骤是整四的命眠。HyStableCain的mint 函微受onlyOuner 保
强。為了 Engine 合的施成功造代带,Engine 合的自身必须成微 My5tableCoin 合的的owncr.
- 款行操作:
1.回到 Renix 中巴部署的 MyStableCoin 合的宽例。
2.找列 transferDwnership 函数。
3,在旁遗的输入框中,粘贴ENGINE_ADDRES5。
4.脂聚 transferDwnership 按钮,亚在 MetaMask 中殖裂交易。
4.4强制瞻盟:碰留授權成功
-
目的:在进行下一步测试前,必浪随保權限已正硬設置。
-
款行操作:
1.等待 transferDanership 交易成功。
2.在MyStableCoin 合约宽例上,贴owner 视面函数技翅。
3.核對结果:返四的地址必渠兴 ENGINE_ADDRESS 完全一致。
4.如果地址不一致,請不要逛行下一步,重新软行4.3步骤。
五、系统集成测腻
在完成业睡所有部署和授壁步履很,需始进行功能测试。 潮用例1:存款與警(Deposit&Hint)
1.定位到已部署的 Engine 合的實例。
2.在Remix左上角的“Vatue*字段输入200,确保单位是Finney。
3.终用depositAndMint 函数兼殖交易。
4.结果睡量:
MSc除翻:在MyStableCoin 合约實例上,期用balanceOf 查陶用户地址,應能看 到非零的 MSC 除。 健康因子:在 Engine 合約實例上,期用getHealthFactor 查旗用户地址,返回值愿 接近 150008008600000000 (1.5)。 o = ev
公奋司 Etvialero 添加查詢自己發行的代
測試用例2:回與銷毁(Redeem&Burn)
1.授權(Approve):
o定位到MyStableCoin合約實例。 o調用approve函數,將spender設置為ENGINE_ADDRESS,amount設置為希望 回的数量(例如50000000000000000000代表50MSC)。 。確交易。
50
1.腹回(Redeem):
o定位到Engine合約實例。 o調用redeemAndBurn函數,將_mscAmountToBurn設置為與上一步approve相 同的数量。 。確韶交易。 eeeeeemm
- m8 @s
EAXIRON 2000 %.4.8
已經提取出50MSC
1.结果證:
oETH餘额:應截察到包的ETH餘增加。 oMSC餘额:MSC餘额相鹰减少。 0健康因子:健康因子應高於初始值,表明詹位風险降低。 S(1) s601 TRANSACTION ACTION Approve 50 O MSC forTnade on Ox735Da433894049F23 by OxFaef0970.AFe14774d [This is a Sepll Testnet transaction only] 1 Transaction Hash: 0x1fb948f9c53c43487c7773a38c342980 JES916P10 Status: Block (1n d 880 s20z-02-nr) o6e suw From: ef09708060405E1e97eBd596947CBAFe14774d To: Value: 0 ETH
0.000070514291855189 ETH
Transaction Fee: sg
1.501486103 Gwei (0.000000001501486103 ETH)
More Details:
六、结與展望
至此,一個包含核心穩定機制的DeFi協已成功構建完成完整測試。本實驗驗證了合約間的權 限控制、與预言機的交互以及基於通度抵押的資產發行與回遥辑。後續可在此基上,進一步探索 清算引擎、多抵押品支持及去中心化治理等高級功能。
原始排版图

