Skip to content

Commit 9c861b1

Browse files
committed
Add study notes for 2025-08-17
1 parent 0931d31 commit 9c861b1

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

kyamaaa.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)