Web3 应用调用 IPFS 服务实现文件去中心化存储
在Web3应用中,有一个很重要的功能就是存储文件,在传统的Web2应用开发中,我们一般会把文件存储在服务器或OSS中,在Web3我们一般把文件存储在IPFS服务中,IPFS服务可以实现文件的去中心化存储,这篇文章主要讲讲Web3应用中如何使用IPFS服务来存储文件。一、关于 IPFSIPFS是一种点对点的超媒体协议,即一个实现文件去中心化存储的协议,通过IPFS可以将文件分解为很多区块并存储在多个提供存储服务的服务器上,和我们Web3去中心化的概念一样,所以我们在Web3应用中文件存储一般也是使用IPFS。 提供IPFS的服务商很多:Pinata: Pinata是一个去中心化的文件存储平台,为开发人员和企业提供了稳定、安全、高效的文件存储和分发服务。nft.storage: nft.storage是一个专门针对NFT存储的去中心化平台,为开发人员和企业提供了安全、高效的NFT存储服务。web3.storage: Web3.storage是用于与IPFS网络和Filecoin区块链互动的网关的另一次迭代。这次我们选择Pinata来实现IPFS上传的操作,选择其他服务商,如Web3....
Web3 应用调用 IPFS 服务实现文件去中心化存储
在Web3应用中,有一个很重要的功能就是存储文件,在传统的Web2应用开发中,我们一般会把文件存储在服务器或OSS中,在Web3我们一般把文件存储在IPFS服务中,IPFS服务可以实现文件的去中心化存储,这篇文章主要讲讲Web3应用中如何使用IPFS服务来存储文件。一、关于 IPFSIPFS是一种点对点的超媒体协议,即一个实现文件去中心化存储的协议,通过IPFS可以将文件分解为很多区块并存储在多个提供存储服务的服务器上,和我们Web3去中心化的概念一样,所以我们在Web3应用中文件存储一般也是使用IPFS。 提供IPFS的服务商很多:Pinata: Pinata是一个去中心化的文件存储平台,为开发人员和企业提供了稳定、安全、高效的文件存储和分发服务。nft.storage: nft.storage是一个专门针对NFT存储的去中心化平台,为开发人员和企业提供了安全、高效的NFT存储服务。web3.storage: Web3.storage是用于与IPFS网络和Filecoin区块链互动的网关的另一次迭代。这次我们选择Pinata来实现IPFS上传的操作,选择其他服务商,如Web3....
在 Solidity 智能合约中调用 Chainlink 预言机获取外部数据及生成随机数
在我们做去中心化应用开发时,其中有两个头疼的问题,一是想要获取去中心化的一些数据,如代币价格等,还有一个就是安全的创建随机数,这篇文章带大家了解一下这两块的实际应用。一、调用 Chainklink 获取外部数据1. Chainlink 预言机介绍由于智能合约无法调用外部 API 这一特性,所以诞生了预言机这个机制用来帮助智能合约获取外部数据,除了应用最广泛的价格数据以外,还包括一些天气数据,体育比赛数据,股票市场数据,交通数据,甚至包括总统选结果等数据。 除了提供数据,预言机广义上的功能也包括提供随机数和作为触发器实现智能合约执行,它们都算是链下的工具来和链上的合约进行交互。 而 Chainlink 是目前预言机数据的最大提供平台。2. Chainlink 获取数据示例// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; /** * THIS IS AN EXAMPLE...
在 Solidity 智能合约中调用 Chainlink 预言机获取外部数据及生成随机数
在我们做去中心化应用开发时,其中有两个头疼的问题,一是想要获取去中心化的一些数据,如代币价格等,还有一个就是安全的创建随机数,这篇文章带大家了解一下这两块的实际应用。一、调用 Chainklink 获取外部数据1. Chainlink 预言机介绍由于智能合约无法调用外部 API 这一特性,所以诞生了预言机这个机制用来帮助智能合约获取外部数据,除了应用最广泛的价格数据以外,还包括一些天气数据,体育比赛数据,股票市场数据,交通数据,甚至包括总统选结果等数据。 除了提供数据,预言机广义上的功能也包括提供随机数和作为触发器实现智能合约执行,它们都算是链下的工具来和链上的合约进行交互。 而 Chainlink 是目前预言机数据的最大提供平台。2. Chainlink 获取数据示例// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; /** * THIS IS AN EXAMPLE...
Web3 开发智能合约部署及合约验证全流程
这篇文章主要讲一下用hardhat框架开发好了一个solidity智能合约后,如何部署到以太坊(ETH)网络上,我会以以太坊测试网(Sepolia)来部署,和以太坊主网操作完全一样,其中会包含测试网ETH币领取,以一个ERC20代币的智能合约为例部署上线,以及上线后智能合约的验证(不验证的话在区块浏览器中看不到源码,别人不太相信你的项目)。一、Solidity 智能合约开发开发这一块如果各位小伙伴还不太懂的话,建议看一下我之前的文章: 聊一聊Web3是什么,Web3从入门到精通开发学习路线。 这里我直接以一个ERC20代币的智能合约为例,项目开源在github上,点此查看 智能合约代码:contract/MyTestToken.sol:// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract ...
Web3 开发智能合约部署及合约验证全流程
这篇文章主要讲一下用hardhat框架开发好了一个solidity智能合约后,如何部署到以太坊(ETH)网络上,我会以以太坊测试网(Sepolia)来部署,和以太坊主网操作完全一样,其中会包含测试网ETH币领取,以一个ERC20代币的智能合约为例部署上线,以及上线后智能合约的验证(不验证的话在区块浏览器中看不到源码,别人不太相信你的项目)。一、Solidity 智能合约开发开发这一块如果各位小伙伴还不太懂的话,建议看一下我之前的文章: 聊一聊Web3是什么,Web3从入门到精通开发学习路线。 这里我直接以一个ERC20代币的智能合约为例,项目开源在github上,点此查看 智能合约代码:contract/MyTestToken.sol:// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract ...
Solidity 数组删除指定位置元素及指定位置新增元素
在使用Solidity开发智能合约时,免不了使用数组,但Solidity中的数组,只提供了push和pop方法来实现尾部新增和删除元素功能,这篇文章主要讲讲实际开发中怎么实现数组删除指定位置元素及指定位置新增元素。一、数组删除指定位置元素1. 默认delete操作符// SPDX-License-Identifier: MIT pragma solidity 0.8.19; contract ArrayRemoveItem { uint[] public arr = [1,2,3,4,5]; function remove(uint index) public { require(index < arr.length, "index not found"); delete arr[index]; } function getLength() public view returns(uint) { return arr.length; } } 这种操作有个问题是,它会把指定位置的元素恢复默认值,如这里uint类型的默认值是0。 我们执行remove(1)操作之后,arr的...
Solidity 数组删除指定位置元素及指定位置新增元素
在使用Solidity开发智能合约时,免不了使用数组,但Solidity中的数组,只提供了push和pop方法来实现尾部新增和删除元素功能,这篇文章主要讲讲实际开发中怎么实现数组删除指定位置元素及指定位置新增元素。一、数组删除指定位置元素1. 默认delete操作符// SPDX-License-Identifier: MIT pragma solidity 0.8.19; contract ArrayRemoveItem { uint[] public arr = [1,2,3,4,5]; function remove(uint index) public { require(index < arr.length, "index not found"); delete arr[index]; } function getLength() public view returns(uint) { return arr.length; } } 这种操作有个问题是,它会把指定位置的元素恢复默认值,如这里uint类型的默认值是0。 我们执行remove(1)操作之后,arr的...
聊一聊Web3是什么,Web3从入门到精通开发学习路线
最近发现Web3这一块非常有意思,概念什么也很新颖超前,这篇文章主要是给大家讲讲关于Web3我的理解,以及如何入门去做这一块的开发。一、介绍 Web3Web3区别于传统的Web2的地方是后端这一块,以前我们传统的Web2应用,需要服务器来跑对应的后端服务,数据也需要放到数据库里(MySQL、Redis等),Web3应用是把我们的后端服务(一般称链端)放到链上运行,数据等也是存到链上。 传统的Web2服务一般使用Java、Go等来写后端服务,Web3一般使用Solidity(最常用)或Rust等来编写智能合约部署到链上运行。 但Web3目前我接触下来发现一些优点和缺点。 优点:因为你整体的服务是放到链上运行的,除非你设置了一个权限很高的账号可以修改数据,或者你写的智能合约本身有安全漏洞(但使用你这个Web3应用的人都能看到你的智能合约代码,别人认为你的智能合约有漏洞之类的可以选择不用),否则数据是不容易被修改的。这也是为什么Web3中Defi项目(去中心化金融)很多。 缺点:也正是因为放到链上运行智能合约,如果你需要修改链上的数据,需要别人对你的数据进行打包确认,数据修改的即时性不...
聊一聊Web3是什么,Web3从入门到精通开发学习路线
最近发现Web3这一块非常有意思,概念什么也很新颖超前,这篇文章主要是给大家讲讲关于Web3我的理解,以及如何入门去做这一块的开发。一、介绍 Web3Web3区别于传统的Web2的地方是后端这一块,以前我们传统的Web2应用,需要服务器来跑对应的后端服务,数据也需要放到数据库里(MySQL、Redis等),Web3应用是把我们的后端服务(一般称链端)放到链上运行,数据等也是存到链上。 传统的Web2服务一般使用Java、Go等来写后端服务,Web3一般使用Solidity(最常用)或Rust等来编写智能合约部署到链上运行。 但Web3目前我接触下来发现一些优点和缺点。 优点:因为你整体的服务是放到链上运行的,除非你设置了一个权限很高的账号可以修改数据,或者你写的智能合约本身有安全漏洞(但使用你这个Web3应用的人都能看到你的智能合约代码,别人认为你的智能合约有漏洞之类的可以选择不用),否则数据是不容易被修改的。这也是为什么Web3中Defi项目(去中心化金融)很多。 缺点:也正是因为放到链上运行智能合约,如果你需要修改链上的数据,需要别人对你的数据进行打包确认,数据修改的即时性不...