Skip to content

智能合约设计(六)

一、信用卡授权与交易安全

1.1 授权机制

在智能合约中,授权机制类似于信用卡的授权流程:

  • 工作原理:无密码信用卡授权(approve)后,spender 可在额度上限(allowance)内调用 transfer 进行扣币
  • 额度检查:每次扣款会检查 allowance 是否充足
  • 额度管理:非无限授权时,扣款后 allowance 会相应减少

1.2 安全意义

授权机制提供了重要的安全保障:

  • 防止误操作和保障交易安全
  • 类似银行卡先设定额度再消费的模式
  • 避免直接划款导致的资金损失

1.3 诈骗风险警示

⚠️ 重要提醒:演示授权时曾因在假网址进行 approve 操作导致资金被转走。请务必谨慎对待授权操作,确认网站真实性。


二、课程作业安排

2.1 本周作业:红包应用开发

开发一个完整的红包展示应用,具体要求如下:

  • [ ] 使用 React 前端展示 ERC-20 name
  • [ ] 编写红包合约并能够默写
  • [ ] 前端连接合约,开发交互界面
  • [ ] 实现发红包功能
  • [ ] 实现抢红包功能
  • [ ] 使用带 index 的事件
  • [ ] 部署到测试链
  • [ ] 开源合约代码

2.2 下周作业:Web3 大学雏形

开发一个 Web3 大学的基础版本,包含以下功能模块:

  • [ ] 部署平台币(一登币)
  • [ ] 开发课程相关合约
  • [ ] 创建课程功能
  • [ ] 定制价格机制
  • [ ] 购买代币和课程并授权
  • [ ] 作者兑换收益功能

提示:可根据个人经验选择合适的着手点。作业涉及较多 Web3 概念,讨论时注意信息安全。


三、Web3 大学项目详解

3.1 项目背景

问题

  • 慕课等平台要求讲师实名授课,存在一定限制
  • 大学教授有知识变现需求但缺少合适平台

解决方案

  • 提出匿名知识分享且能带来收益的平台概念
  • 曾获得 150 万美元融资(因个人原因搁置)
  • 现作为实战项目进行开发

3.2 核心模块

视频学习模块

  • Slogan:"Learn to Earn"(学习即收益)
  • 用户激励:用户学习即可获得一登币奖励
  • 教师激励:老师发布课程也有相应奖励
  • 平台份额:初始化 Mint 一登币时为平台预留份额

NFT 证书系统

  • 学完课程奖励不可转让的 NFT
  • 积累一定数量的 NFT 可获得工作推荐机会

3.3 技术实现

架构设计

存储位置内容
链下视频内容
链上购买记录、金融逻辑、资产信息

登录与验证

  • 采用 MetaMask 登录
  • 通过签名验证用户身份
  • 链上主要存储金融逻辑和资产信息

四、编程语言特性

4.1 函数重载

编译型语言(如 Solidity):

  • 可通过编译器实现函数重载
  • 函数编译后签名不同,编译器自动识别

TypeScript

  • 可实现伪重载
  • 写法更美观,但最终编译为一个函数
  • 重载主要为满足不同业务场景需求

4.2 抽象类与虚方法

抽象类特点

  • 可包含虚方法(virtual methods)
  • interface 的区别:可以实现方法
  • 子类重写方法时可加 override 关键字

注意:不同语言对抽象类和虚方法的实现有所差异。


五、合约相关技术

5.1 函数选择器

  • 函数编译后有对应的函数选择器
  • 可通过特定语法调用
  • 了解其编码地址即可使用

5.2 ABI(应用二进制接口)

定义

  • 一种 JSON 格式的接口描述

用途

  • 用于对智能合约公共事件和方法进行编码和解码
  • 与挖矿计算哈希时的编码对应
  • 编译后的 ABI 供前端使用

5.3 calldata

特性

  • 底层数据传输类型
  • 参数只读,不可修改、不可扩容
  • 指向外部调用传入的数据

优势

  • 不做内存拷贝,节省 gas
  • 适合 external 函数入参
  • 可与 memory 替换使用

5.4 合约调用合约

三种调用方式

  1. Import + New 方式

    • 类似 JavaScript 的 import 和 new
    • 需要代码仓库在一起
  2. 继承调用

    • 类似 JavaScript 继承语法
    • 适合有继承关系的合约
  3. 接口 + 地址调用

    • 通过接口和合约地址调用
    • 适用于线上已部署的合约
    • 可使用 delegatecallcall 方式处理特殊需求

总结

本节课程涵盖了智能合约开发的多个重要方面,从安全授权机制到实际项目开发,从语言特性到技术实现细节。通过 Web3 大学项目的实战演练,可以深入理解区块链应用的完整开发流程。