@@ -15,6 +15,76 @@ timezone: UTC+8
1515## Notes
1616
1717<!-- Content_START -->
18+ # 2025-08-17
19+
20+ DApp 创意与学习笔记(新增前端方向内容)
21+ 一、DApp 创意:去中心化的音乐版权交易平台
22+ (一)创意背景
23+ 在传统音乐产业中,音乐版权交易存在诸多问题,如版权归属不清晰、交易流程繁琐、中间环节过多导致创作者收益受损等。区块链技术的出现为解决这些问题提供了新的思路,通过创建一个去中心化的音乐版权交易平台 DApp,可以实现音乐版权的透明化管理和高效交易。
24+ (二)功能设计
25+ 版权登记:音乐人可以在平台上上传自己的音乐作品,并通过智能合约进行版权登记。智能合约会记录作品的详细信息,包括创作者信息、创作时间、作品内容哈希值等,确保版权归属明确且不可篡改。
26+ 版权交易:版权所有者可以在平台上设定版权的出售或授权条款,包括价格、使用范围、使用期限等。其他用户或音乐机构可以浏览版权市场,选择感兴趣的版权进行购买或授权。交易过程通过智能合约自动执行,资金和版权权益的转移即时完成。
27+ 收益分配:当音乐作品被使用产生收益时(如播放分成、广告收入等),平台会根据智能合约中设定的收益分配规则,自动将收益分配给版权所有者和相关参与者。例如,创作者可以设定自己与制作人、混音师等的分成比例。
28+ 音乐播放与推广:平台集成音乐播放功能,用户可以在平台上收听经过授权的音乐作品。同时,引入激励机制,鼓励用户分享和推广音乐,分享者可以获得一定的奖励(如平台代币)。
29+ 版权追溯与维权:由于所有版权信息和交易记录都存储在区块链上,一旦发生版权纠纷,可以方便地追溯版权的流转历史和交易细节,为维权提供有力证据。
30+ (三)技术实现要点
31+ 区块链选择:以太坊区块链
32+ 智能合约编写:使用 Solidity 语言编写版权登记、交易、收益分配等核心智能合约。确保智能合约的安全性和准确性,进行充分的测试和审计。
33+ 存储方案:对于音乐作品的存储,可以结合 IPFS(星际文件系统),将音乐文件存储在分布式网络中,通过哈希值在区块链上关联和索引,确保数据的长期保存和可用性。
34+ 二、DApp 开发学习笔记
35+ (一)智能合约基础
36+ Solidity 语言:
37+ Solidity 是以太坊智能合约的主要编程语言,是一种面向对象的静态类型语言。对于有编程经验,特别是熟悉 TS、Java 等基于类的编程语言的人来说,有一定的相似性,便于学习。
38+ 例如,contract关键字类似于class,用于定义合约,一个合约相当于一个类。状态变量用于存储合约内的数据,如同类的成员变量。函数可以定义在合约内部(类似类方法)或外部(普通工具函数)。
39+ 访问修饰符private(私有)、public(公开)语义与其他语言相同,不过没有protected,取而代之的是internal(内部),还有一个external表示仅供外部调用。
40+ 函数修饰符类似于 TS 装饰器或 Java 注解,可用于面向切面编程(AOP),且函数与函数修饰符可被衍生合约覆盖。
41+ Solidity 支持枚举(enum,有限选项集合)和映射(mapping,无限选项),都可看作是 ES 中的对象,但使用场景不同。同时,它支持多重继承与函数多态性,有助于代码的组合复用,不过由于合约开发受 ERC 驱动,多重继承的副作用相对较小。
42+ ERC 标准:
43+ 在以太坊中,“ERC” 全称为 “Ethereum Request for Comments”,是 EIP(Ethereum Improvement Proposal)的一种类型,定义了智能合约应用程序的标准和约定。它对于保障智能合约应用程序的互操作性至关重要。
44+ 常见的基本 ERC 标准有 ERC - 20(同质化代币)和 ERC - 721(非同质化代币,即 NFT)。ERC - 20 可作为类金融系统的基础设施,如虚拟货币、贡献积分等;ERC - 721 可作为身份系统的基础设施,如勋章、证书、门票等。开发者可将 ERC 看作权威的 API 文档,在开发相应代币合约时遵循其标准。
45+ (二)开发工具
46+ Hardhat:
47+ contracts:存放智能合约源码。
48+ artifacts:通过hardhat compile命令生成的编译后文件。
49+ ignition:基于 Hardhat Ignition 部署智能合约时使用,这里生成的编译后文件与目标链绑定,存放在对应链 ID 的文件夹下。
50+ test:用于编写智能合约功能测试代码。
51+ 在hardhat.config.js文件中可自定义测试网并进行部署,通过--network testnet指定网络。还可添加插件来扩展功能,如require('hardhat - abi - explore'),安装并配置后,使用npx hardhat abi: explore 命令可生成 ABI 目录。
52+ Remix IDE:
53+ Remix 是以太坊官方提供的在线 IDE,支持编写合约、部署合约(可在正式网络、测试网和本地测试网络进行)、合约 Debug 以及合约测试。
54+ 其默认环境是 VM(Virtual Machine)环境,若要使用公链测试网络,需借助钱包
55+ (三)测试驱动开发
56+ 概念:测试驱动开发(Test Driven Development,TDD)是一种不同于传统开发流程的方法。它要求在编写功能代码之前先编写测试代码,然后编写仅使测试通过的功能代码,通过测试来推动整个开发过程。
57+ 优势:
58+ 降低开发者负担:在编写代码前明确代码的预期行为,减少开发过程中的不确定性。
59+ 保护网:确保代码在后续修改和扩展时,原有的功能不受影响,起到保护代码的作用。
60+ 提前澄清需求:在编写测试用例的过程中,能更深入理解需求,避免需求理解偏差导致的开发错误。
61+ 快速反馈:开发者能快速得知代码是否符合预期,及时调整开发方向。
62+ 实施要点:
63+ 分析问题并拆分:将复杂问题分解为一个个可操作的小任务,便于逐个实现和测试。
64+ 代码设计:对功能的实现进行规划和设计,确定代码结构和逻辑。
65+ 编写测试预期结果:使用测试框架(如在 Hardhat 项目中使用 Mocha 和 Chai),通过expect(xx).to.equal("??")等方式明确每个功能点的预期输出。
66+ (四)NFT 交易市场合约开发要点
67+ 开发准备:可借助 ERC 标准智能合约生成巫师(如https://docs.openzeppelin.com/contracts/5.x/wizard )来生成基础的 NFT 合约。同时,了解solcjs和hardhat在管理 Solidity 编译版本上的区别,solcjs是独立的 Solidity 编译器的 JavaScript 包装器,需手动安装和管理版本;hardhat是开发框架,集成了 Solidity 编译器,可通过配置文件轻松管理版本,更适合大型项目。
68+ 合约设计考虑:在设计 NFT 交易市场合约时,需思考诸多问题,如市场中的 NFT 列表是否分页,不分页在 NFT 数量多时影响性能和用户体验,分页则会有翻页延迟问题;NFT 的图片 URL 存储位置,若存于 NFT 合约,获取列表时频繁外部调用影响性能,存于市场合约又可能存在数据一致性问题;是否在 NFT 合约中维护 “谁拥有哪些代币” 的列表,有则数据冗余,无则难以直观知晓代币归属情况。
69+ 测试与优化:在 Remix 部署合约后,先利用其手动测试按钮测试基本功能,再使用 Hardhat 结合 js 代码进行更全面的测试。还可使用一些工具进行代码优化,如安装并使用truffle - flattener将合约及其依赖代码合并到一个文件中,便于管理和部署。
70+ UI 组件库:Ant Design、Element UI
71+ 钱包连接模块:
72+ Ethers.js 提供的 API 检测用户是否安装钱包
73+ 连接成功后,获取用户的账户地址、余额等信息,并在界面上展示。同时,监听钱包账户切换、网络切换等事件,及时更新界面状态。
74+ 示例代码(使用 Ethers.js 与 MetaMask 连接):
75+ 音乐上传与版权登记模块:
76+ 设计上传表单,允许音乐人选择本地音乐文件,并填写作品名称、创作者信息、版权说明等内容。
77+ 实现文件分片上传至 IPFS 的功能,可使用ipfs-http-client库,将文件上传后获取文件的哈希值。
78+ 将作品信息和 IPFS 哈希值通过智能合约进行版权登记,调用合约的registerCopyright函数,传入相关参数,并等待交易确认。
79+ 上传过程中显示进度条,提升用户体验,交易确认后给予成功提示。
80+ 版权交易模块:
81+ 展示版权市场列表,包括音乐作品名称、创作者、价格、授权期限等信息,可实现分页、筛选、排序等功能。
82+ 点击购买或授权按钮时,调用智能合约的交易函数,传入版权 ID、价格等参数,使用用户钱包签名交易并发送至区块链。
83+ 交易过程中显示加载状态,交易成功后更新界面的交易状态和用户的版权持有情况。
84+ 音乐播放模块:
85+ 集成音乐播放器组件,如react-audio-player(React)或vue-audio(Vue),通过 IPFS 哈希值构建音乐文件的 URL,实现音乐的播放、暂停、进度调整等功能。
86+ 只有获得授权的用户才能播放相应的音乐作品,前端需验证用户的版权持有情况,未授权用户则隐藏播放按钮或提示购买授权。
87+
1888# 2025-08-16
1989
2090## 同学们的分享
0 commit comments