Conflux智能合约学习_创建c链上分享网盘资源的Dapp

异想天开部分:

背景: 把百度云盘、阿里云盘、天翼云盘等分享资源链接信息写到区块链上,避免资源分享论坛服务器不续费、或者资源版权原因被迫和谐。导致分享的数据找不到问题。

其实我还想做一个叫藏经阁的Dapp(就是盗版电子书分享网站),电子书全部存储到IPFS上,由于电子书单个文件大小比较小,比较适合IPFS存储能保证下载速度较快。

注: 无法保证分享者主动取消分享的内容,只能保证大家分享的数据能在链上永久保存。

数据的存储方式:推荐使用传统的网盘链接分享方式,(主要是我一年前放到ipfs上的小姐姐,现在下载不下来了,woc不带这样玩的)

使用c链存储网盘分享链接的好处:

  1. cfx 币价便宜、cfx币价便宜、cfx币价便宜
  2. cfx 交易的手续费低

目前计划项目的运行方式是前端直接和c链数据交互。避免用户和链之间在加一层服务器,不需要服务器的好处有如下

  1. 可以真正的避免提供服务器的所有者对所有用户分享的数据具有绝对的控制权,简单来说就是为了避免传统的站长因为种种不可抗力或者个人原因提桶跑路,导致用户在论坛辛辛苦苦分享的数据全没了。
  2. 这点是最重要的,就是避免版权法律问题,是用户进行分布式内容分享的,这样可以做到最大程度的避免和谐(比如快播)。

前端: React 或者 VUE

后端: 不需要后端服务器,后期可能部署到IPFS上,或者每个人本地运行项目,连接到链上获取数据, 直接使用智能合约。

简单使用智能合约部分:

进度目前:正在学习前端和Solidity中

Solidity 目前简单的合约模型,还有很多功能待完善。

合约在测试网的地址:cfxtest:acb2u8srts3w28k4skdszmadrharp8ee5a4kgrnhk5

分享的钱包地址: cfxtest:aam81t80tu6f5zamuk0hycy14urec6xc8aepw5cmt2

第一个分享的数据:

2.向测试链上写入数据

查询某个地址分享的所有资源

代码部分:

// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;

contract ShareDataFile {
    /// @dev share data struct
    struct ResourceFile {
        uint id;
        uint8 storagePlatform;
        string shareURl;
        string resourceName;
        string retrievePassword;
    }

    /// @dev user storage files
    mapping(address => ResourceFile[]) public allShareData;

    /// @dev already register user.
    mapping(address => bool) public registerUsers;

    /// @dev storage all user address.
    address [] public allUserAddress;
    
    uint totalShareResourceCount;

    /// @dev add user address
    function addUser(address _userAddress) external{
        if(!registerUsers[_userAddress]){
            registerUsers[_userAddress] = true;
            allUserAddress.push(_userAddress);
        }
        
    }

    function shareDataOnBlockChain(uint8 _platform,string memory _shareUrl,string memory _shareFileName,string memory _password) external {
        address _shareUserAddress = msg.sender;
        uint resId = totalShareResourceCount++;
        ResourceFile memory shareFile = ResourceFile({
            id : resId,
            storagePlatform : _platform,
            shareURl : _shareUrl,
            resourceName: _shareFileName,
            retrievePassword:_password
        });
        allShareData[_shareUserAddress].push(shareFile);
    }

    function listAllSharedFilesByAddress(address _useraddress) public view returns (ResourceFile[] memory files){
        require(registerUsers[_useraddress],"user don't shared file");
        return allShareData[_useraddress];
    }


}
1 Like

2022-06-05 打卡学习进度:

  1. 学会了Conflux core 和 Etherum 上如何验证签名。
    这个暂时还不知道实际的应用场景,对我想做的这个Dapp有什么帮助,但是在合同应用方面挺重要的。