了解加密货币以及区块链的正确方式--以太坊,NFT,比特币,Web3
什么是以太坊?
以太坊是一个开源的、公共的、区块链平台,允许任何人创建和使用智能合约和去中心化的应用。它使用以太币(Ether)作为交易货币,用于付费在平台上执行代码。
以太坊的主要目标是什么?
以太坊的主要目的是提供一个分布式的虚拟机,允许任何人在上面执行任何想要执行的代码,而无需担心它被篡改或恶意攻击。为了实现这一目标,以太坊使用了区块链技术来保证代码执行的去中心化和安全性。
以太坊的另一个目标是创建一个通用的开发平台,使得开发人员能够利用其中的智能合约功能来创建去中心化的应用(称为 dApps)。以太坊的 dApps 可以用来做很多事情,比如实现分布式自治组织(DAO)、金融应用、供应链管理、游戏等等。
其次是提供一种可扩展的区块链技术,使得其他项目能够建立在其之上,从而创建出新的区块链应用。这就是所谓的以太坊元平台(Ethereum meta-platform)的概念。
我们通过一个实例来更加了解以太坊(Ethereum )
https://campaign-sigma.vercel.app/
通过使用Metamask这样的轻客户端允许用户通过浏览器与以太坊网络进行交互,而无需安装整个以太坊节点软件。
区块链取代了我们传统开发所使用的中心化数据库
以太坊作为一种数据库系统具有许多优势:
以太坊是一个分布式公共区块链网络,具有高度可编程性和智能合约功能。尽管以太坊在区块链领域中具有重要地位,但它也存在一些问题和需要优化的地方。
而去年随着以太坊2.0的推出,已经从POW开始正式转向POS,二层网络和分片技术会在今年看到更多的变化,这些技术都将会增强以太坊的性能,使之能够拥有更快更高的处理速度和更低的交易手续费。
诚然,目前以太坊具有比较高的学习成本,但是越来越多的工具以及类似我们这样的知识博主会帮助大家了解和学习以太坊
下面的代码,就是上面这个演示案例的智能合约代码。欢迎大家在Solidy中测试
智能合约代码
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
contract CrowdFunding {
struct Campaign {
address owner;
string title;
string description;
uint256 target;
uint256 deadline;
uint256 amountCollected;
string image;
address[] donators;
uint256[] donations;
}
mapping(uint256 => Campaign) public campaigns;
uint256 public numberOfCampaigns = 0;
function createCampaign(address _owner, string memory _title, string memory _description, uint256 _target, uint256 _deadline, string memory _image) public returns (uint256) {
Campaign storage campaign = campaigns[numberOfCampaigns];
require(campaign.deadline < block.timestamp, "The deadline should be a date in the future.");
campaign.owner = _owner;
campaign.title = _title;
campaign.description = _description;
campaign.target = _target;
campaign.deadline = _deadline;
campaign.amountCollected = 0;
campaign.image = _image;
numberOfCampaigns++;
return numberOfCampaigns - 1;
}
function donateToCampaign(uint256 _id) public payable {
uint256 amount = msg.value;
Campaign storage campaign = campaigns[_id];
campaign.donators.push(msg.sender);
campaign.donations.push(amount);
(bool sent,) = payable(campaign.owner).call{value: amount}("");
if(sent) {
campaign.amountCollected = campaign.amountCollected + amount;
}
}
function getDonators(uint256 _id) view public returns (address[] memory, uint256[] memory) {
return (campaigns[_id].donators, campaigns[_id].donations);
}
function getCampaigns() public view returns (Campaign[] memory) {
Campaign[] memory allCampaigns = new Campaign[](numberOfCampaigns);
for(uint i = 0; i < numberOfCampaigns; i++) {
Campaign storage item = campaigns[i];
allCampaigns[i] = item;
}
return allCampaigns;
}
}
使用 MetaMask 可以让用户在使用轻应用时能够方便地进行以太坊交易,而无需将私钥暴露给轻应用。这样可以提高用户的账户安全。另外,MetaMask 也支持多种网络,可以让用户在不同网络之间轻松切换。
- 在浏览器中安装 MetaMask 插件。
- 打开 MetaMask,点击“Create a Wallet”来创建新钱包。
- 备份你的助记词,并输入一个密码。这些助记词将用来恢复你的钱包。
- 在 MetaMask 中输入你的助记词,并输入你的密码来恢复钱包。
- 在 MetaMask 中查看你的钱包地址,并复制它以便在以太坊网络上进行交易。
- 现在你可以在 MetaMask 中进行以太坊交易了,如转账,查看余额等。
需要注意的是,在使用MetaMask前,需要确保你的浏览器支持MetaMask插件。
- Etherscan 支持多种网络,在使用之前请确保你选择了正确的网络。
- 使用Etherscan前,请确保你有一个以太坊地址,这个地址是一个HEX字符串,以0x开头。
- Etherscan 上的信息是实时的,所以如果你的交易还没有被区块链网络确认,可能在 Etherscan 上查不到相关信息。
- 在Etherscan上查询交易信息时,可以使用交易哈希(transaction hash)来查询。
- 如果你想查询某个地址的交易记录,可以使用地址来查询。
- Etherscan 上的信息是公开的,所以请勿在上面泄露私密信息。
- Etherscan上还有大量的高级功能,可以根据需要慢慢学习。
智能合约的工作原理如下:
- 首先,智能合约被编写并部署到以太坊区块链上。
- 然后,智能合约可以被外部的用户或程序调用。
- 当智能合约被调用时,它会检查调用者提供的参数是否符合预先设定的条件。
- 如果参数符合条件,智能合约会自动执行相应的交易,如转账。
- 智能合约所执行的交易会被记录到区块链上,并被其他人查询。
- 如果参数不符合条件,智能合约会拒绝执行交易。
智能合约的优点在于,它可以在没有人为干预的情况下自动执行交易,并且所有交易都被记录到区块链上,可以提高交易的透明度和可信度。