第二周·总结一:支付、合约交互与事件

  • 涵盖课次

    • lesson8:多币种打赏 TipJar(参考:day08-TipJar.sol
    • lesson9:智能计算器与合约间调用(参考:day09-SmartCalculator/Calucator.solday09-SmartCalculator/ScientificCalculator.sol
    • lesson10:活动追踪与事件(参考:day10-ActivityTracker.sol
  • 核心知识点

    • ETH 接收与计价:payablemsg.value、以“汇率 × 金额 → wei”实现法币到 ETH 的映射(本课以静态汇率模拟)。
    • 合约间交互:静态类型调用(接口/合约类型)与低级调用(address.call + ABI 编码)的权衡与安全检查。
    • 事件与日志:用 event + emit 记录关键状态变更,indexed 便于前端过滤与链下订阅。
  • 代码要点与启发

    • TipJar(多币种打赏):
      • conversionRates 存储汇率,supportedCurrecies 列表配合 keccak256(bytes(..)) 做字符串等值判断,避免线性字符串比较陷阱。
      • tipInEth()tipInCurrency() 分别支持直接打赏与“法币计价 → ETH 支付”,并分别累计到 tipsPerCurrencytotalTipsReceived
      • withdrawTips() 统一结算到 ownertransferOwnership() 支持所有权转移。
      • 设计建议:
        • 将不同币种的累计值统一归一为 wei 便于统计(当前 tipsPerCurrency["ETH"] 记录 wei,但法币分支记录原始法币金额)。
        • 增加事件(TipReceived、Withdrawn、RateUpdated),并考虑接入预言机源维护汇率的可信度与时效性。
        • 对外部转账使用 Checks-Effects-Interactions 顺序并评估是否需要重入保护。
    • SmartCalculator(合约间调用):
      • 主合约 Calucator 通过设置的地址与 ScientificCalulator 进行函数调用,分别展示了强类型调用与低级 call + abi.encodeWithSignature 的用法与差异。
      • 设计建议:
        • 优先使用强类型接口/合约(编译期检查签名一致性);低级调用需严格校验 success 并解码返回值。
        • 校验被调用合约地址非零且为已部署合约;为外部依赖提供 setter 的同时加入 onlyOwner 与事件日志。
        • 统一函数签名类型(例如 squareRoot 的参数类型在签名编码与目标函数处需一致)。
    • ActivityTracker(事件驱动的行为记录):
      • struct 建模用户信息与训练记录;mapping(address => WorkoutActivity[]) 维护历史;多事件(注册、更新、记录、里程碑)驱动前端。
      • 里程碑示例:累计训练次数/距离达到阈值触发 MilestoneAchieved,展示“链上进度 → 前端徽章”的事件模式。
      • 设计建议:
        • 为数组型历史记录提供分页读取接口,避免一次性返回过大数据。
        • 里程碑阈值应常量化或可配置;对体重变化等计算做好整数除法的精度处理。
  • 安全与工程化要点

    • 汇率与精度:统一以 wei 为最小单位,避免浮点;引入“汇率精度常量”并在 UI 层做展示换算。
    • 外部调用:低级调用失败要回滚;避免在外部调用前后留下不一致状态;必要时使用重入保护。
    • 事件设计:为关键路径添加事件,涵盖输入参数与必要的索引字段,平衡 Gas 与可检索性。
  • 自测清单

    • 你会如何把现实世界的法币价格安全地引入链上?预言机接入的信任/成本/延迟如何权衡?
    • 写出一次安全的跨合约调用流程:地址校验 → 强类型接口/低级调用 → 检查 success → 解码返回值 → 更新状态。
    • 如果要在前端分页读取海量训练记录,你会如何设计只读接口与事件过滤?
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容