Blockchain 我如何才能让代币客户访问不在区块链上的一堆文件?(以太坊)

Blockchain 我如何才能让代币客户访问不在区块链上的一堆文件?(以太坊),blockchain,ethereum,smartcontracts,Blockchain,Ethereum,Smartcontracts,起初,我想简单地让他们看到一个Google Drive链接,但这必须保持不变,这样客户就可以彼此发送链接,即使人们必须使用智能合约才能获得链接。你可以通过(分布式文件存储)和以太坊DApp解决这个问题。考虑到您提到希望要求人们使用智能合约来访问该文件,我认为您应该在将该文件存储到IPFS之前对其进行加密。因为IPFS是分布式的,任何人都可以获得文件,如果他们知道它存在的话,但是只有能够访问私钥的人才能读取它 满足智能合约的条件后,您可以释放密钥。因为以太坊智能合约无法进行实际解密,所以您的web

起初,我想简单地让他们看到一个Google Drive链接,但这必须保持不变,这样客户就可以彼此发送链接,即使人们必须使用智能合约才能获得链接。

你可以通过(分布式文件存储)和以太坊DApp解决这个问题。考虑到您提到希望要求人们使用智能合约来访问该文件,我认为您应该在将该文件存储到IPFS之前对其进行加密。因为IPFS是分布式的,任何人都可以获得文件,如果他们知道它存在的话,但是只有能够访问私钥的人才能读取它

满足智能合约的条件后,您可以释放密钥。因为以太坊智能合约无法进行实际解密,所以您的web3应用程序需要完成这一部分

例如,在web3应用程序中,文件存储在IPFS上后:

addNewFile: function() {
    // encrypt the file
    var encryptedFile = CryptoJS.AES.encrypt(fileData, passPhrase);
    // store on the IPFS
    ipfs.files.write( ... => {
        // make sure it worked
        ...
        // (fileName is an IPFS-generated hash uniquely identifying the (encrypted) file
        // write it to the contract
        deployedFileContract.AddFileEntry(fileLocation, fileName, passPhrase, function(error) {
            // respond to error condition
        });
    });
};

retrieveEncyptedFile: function() { 
    ...
    deployedFileContract.RetrieveFileEntry.call(_pointer-to-file_, function(error, result) {
        // fetch an encrypted file as a readable stream from IPFS

        // decrypt it and probably do something funky with mime types to make sure it gets saved
        var decryptedFile =  CryptoJS.AES.decrypt(encryptedFileStream, passPhrase). ...

    });
...
};

总之,你需要你的Solidity智能合约和一个web3应用程序。您可以在浏览器中运行IPFS js客户端,或者通过Nodejs或Go访问它。

使用IPFS或swarm之类的工具来存储链接,并使用网关为用户提供服务content@RaghavSood我必须加入Ropsten网络,我想他们不会在testnet上提供,对吗?