-
涵蓋課次
- lesson8:多幣種打賞 TipJar(參考:
day08-TipJar.sol) - lesson9:智能計(jì)算器與合約間調(diào)用(參考:
day09-SmartCalculator/Calucator.sol,day09-SmartCalculator/ScientificCalculator.sol) - lesson10:活動(dòng)追蹤與事件(參考:
day10-ActivityTracker.sol)
- lesson8:多幣種打賞 TipJar(參考:
-
核心知識(shí)點(diǎn)
- ETH 接收與計(jì)價(jià):
payable、msg.value、以“匯率 × 金額 → wei”實(shí)現(xiàn)法幣到 ETH 的映射(本課以靜態(tài)匯率模擬)。 - 合約間交互:靜態(tài)類型調(diào)用(接口/合約類型)與低級(jí)調(diào)用(
address.call+ ABI 編碼)的權(quán)衡與安全檢查。 - 事件與日志:用
event+emit記錄關(guān)鍵狀態(tài)變更,indexed便于前端過(guò)濾與鏈下訂閱。
- ETH 接收與計(jì)價(jià):
-
代碼要點(diǎn)與啟發(fā)
- TipJar(多幣種打賞):
-
conversionRates存儲(chǔ)匯率,supportedCurrecies列表配合keccak256(bytes(..))做字符串等值判斷,避免線性字符串比較陷阱。 -
tipInEth()與tipInCurrency()分別支持直接打賞與“法幣計(jì)價(jià) → ETH 支付”,并分別累計(jì)到tipsPerCurrency與totalTipsReceived。 -
withdrawTips()統(tǒng)一結(jié)算到owner;transferOwnership()支持所有權(quán)轉(zhuǎn)移。 - 設(shè)計(jì)建議:
- 將不同幣種的累計(jì)值統(tǒng)一歸一為 wei 便于統(tǒng)計(jì)(當(dāng)前
tipsPerCurrency["ETH"]記錄 wei,但法幣分支記錄原始法幣金額)。 - 增加事件(TipReceived、Withdrawn、RateUpdated),并考慮接入預(yù)言機(jī)源維護(hù)匯率的可信度與時(shí)效性。
- 對(duì)外部轉(zhuǎn)賬使用 Checks-Effects-Interactions 順序并評(píng)估是否需要重入保護(hù)。
- 將不同幣種的累計(jì)值統(tǒng)一歸一為 wei 便于統(tǒng)計(jì)(當(dāng)前
-
- SmartCalculator(合約間調(diào)用):
- 主合約
Calucator通過(guò)設(shè)置的地址與ScientificCalulator進(jìn)行函數(shù)調(diào)用,分別展示了強(qiáng)類型調(diào)用與低級(jí)call+abi.encodeWithSignature的用法與差異。 - 設(shè)計(jì)建議:
- 優(yōu)先使用強(qiáng)類型接口/合約(編譯期檢查簽名一致性);低級(jí)調(diào)用需嚴(yán)格校驗(yàn)
success并解碼返回值。 - 校驗(yàn)被調(diào)用合約地址非零且為已部署合約;為外部依賴提供 setter 的同時(shí)加入
onlyOwner與事件日志。 - 統(tǒng)一函數(shù)簽名類型(例如
squareRoot的參數(shù)類型在簽名編碼與目標(biāo)函數(shù)處需一致)。
- 優(yōu)先使用強(qiáng)類型接口/合約(編譯期檢查簽名一致性);低級(jí)調(diào)用需嚴(yán)格校驗(yàn)
- 主合約
- ActivityTracker(事件驅(qū)動(dòng)的行為記錄):
- 用
struct建模用戶信息與訓(xùn)練記錄;mapping(address => WorkoutActivity[])維護(hù)歷史;多事件(注冊(cè)、更新、記錄、里程碑)驅(qū)動(dòng)前端。 - 里程碑示例:累計(jì)訓(xùn)練次數(shù)/距離達(dá)到閾值觸發(fā)
MilestoneAchieved,展示“鏈上進(jìn)度 → 前端徽章”的事件模式。 - 設(shè)計(jì)建議:
- 為數(shù)組型歷史記錄提供分頁(yè)讀取接口,避免一次性返回過(guò)大數(shù)據(jù)。
- 里程碑閾值應(yīng)常量化或可配置;對(duì)體重變化等計(jì)算做好整數(shù)除法的精度處理。
- 用
- TipJar(多幣種打賞):
-
安全與工程化要點(diǎn)
- 匯率與精度:統(tǒng)一以 wei 為最小單位,避免浮點(diǎn);引入“匯率精度常量”并在 UI 層做展示換算。
- 外部調(diào)用:低級(jí)調(diào)用失敗要回滾;避免在外部調(diào)用前后留下不一致?tīng)顟B(tài);必要時(shí)使用重入保護(hù)。
- 事件設(shè)計(jì):為關(guān)鍵路徑添加事件,涵蓋輸入?yún)?shù)與必要的索引字段,平衡 Gas 與可檢索性。
-
自測(cè)清單
- 你會(huì)如何把現(xiàn)實(shí)世界的法幣價(jià)格安全地引入鏈上?預(yù)言機(jī)接入的信任/成本/延遲如何權(quán)衡?
- 寫出一次安全的跨合約調(diào)用流程:地址校驗(yàn) → 強(qiáng)類型接口/低級(jí)調(diào)用 → 檢查 success → 解碼返回值 → 更新?tīng)顟B(tài)。
- 如果要在前端分頁(yè)讀取海量訓(xùn)練記錄,你會(huì)如何設(shè)計(jì)只讀接口與事件過(guò)濾?
第二周·總結(jié)一:支付、合約交互與事件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 原文:Smart contracts 正如我們?cè)赱intro]中看到的那樣,以太坊中有兩種不同類型的帳戶:外部擁有...
- ## 區(qū)塊鏈智能合約: 實(shí)際應(yīng)用與安全審計(jì) **Meta Description:** 深入探討區(qū)塊鏈智能合約的核...
- ## 區(qū)塊鏈智能合約: 實(shí)際應(yīng)用與安全審計(jì) **Meta Description:** 深入探討區(qū)塊鏈智能合約的核...
- # 區(qū)塊鏈智能合約安全:Foundry測(cè)試框架檢測(cè)ERC-20代幣的重入漏洞 ```html ``` ## 引言:...
- # 區(qū)塊鏈智能合約安全:Foundry測(cè)試框架檢測(cè)ERC-20代幣的重入漏洞 ```html ``` ## 引言:...