赞
踩
中本聪设计的比特币大获成功后,各种区块链和其对应的加密货币层出不穷,其中不乏新技术的使用,不过大部分的模仿货币最后都销声匿迹了,最终存活并存有大量用户的被称作主流币。
BTC比特币 |
ETH以太坊 |
LTC莱特币 |
XRP瑞波币 |
USDT (代币) |
USDC (代币) |
BUSD (代币) |
… |
代币是建立在现有区块链平台上的,比如以太坊。你可以用以太币(ETH)来换取这些代币,然后在特定的区块链应用程序中使用它们,就像在游乐园里使用游戏币一样。这些代币没有自己的区块链,它们依赖于别的区块链平台来运行和管理。
其中BTC毫无疑问是当今老大,而**ETH(以太坊)**因为其开创了智能合约平台,使区块链进入2.0时代,坐稳老二的位置。
从以太坊开始,区块链技术号称不再局限于加密货币领域,而是推广到整个web行业,催生出web3.0。
比特币网络中,每一个区块中只有转账记录,是否可以存点别的东西来提高其扩展性?
以太坊创始人Vitalik和其团队,设计了一种脚本语言Solidity和以太坊虚拟机,程序员可以将用这种语言写的代码,打包成字节码,一起存在区块链上。
以太坊的节点客户端都内置了虚拟机,可以执行这个区块中的代码,实现一些自定义操作。
所以以太坊不仅被理解为一种加密货币,也是一个执行代码的平台,这种代码被称为智能合约。
见仁见智,关键是理解这种想法,无非在前面区块中写死了一些函数代码,可以供后面的区块调用。各种新概念的仍源于区块链的公开性和不可篡改性。比如:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; contract Fundraiser { // 定义募捐目标和截止时间 uint public constant TARGET = 5000 ether; uint public constant DEADLINE = block.timestamp + 5 days; // 记录捐款人和捐款金额 mapping(address => uint) public contributions; address public owner; uint public totalContributions; // 构造函数,设置合约拥有者 constructor() { owner = msg.sender; } // 接收捐款的函数 function contribute() external payable { require(block.timestamp < DEADLINE, "募捐已结束"); contributions[msg.sender] += msg.value; totalContributions += msg.value; } // 检查是否达到目标,若未达到则退款 function checkGoalReached() external { require(block.timestamp >= DEADLINE, "募捐尚未结束"); if (totalContributions < TARGET) { refundAll(); } } // 退款给所有捐款人 function refundAll() internal { for (uint i = 0; i < contributors.length; i++) { address contributor = contributors[i]; uint amount = contributions[contributor]; (bool success, ) = contributor.call{value: amount}(""); require(success, "退款失败"); contributions[contributor] = 0; } totalContributions = 0; } // 提取资金,只有在达到目标后才能调用 function withdraw() external { require(msg.sender == owner, "只有合约拥有者才能提取资金"); require(totalContributions >= TARGET, "未达到募捐目标"); require(block.timestamp >= DEADLINE, "募捐尚未结束"); (bool success, ) = owner.call{value: address(this).balance}(""); require(success, "提款失败"); } // 用于接收未标记为contribute的ETH receive() external payable { contribute(); } }
将这个合约存到区块链中,每一个人就可以调用里面的函数来捐钱到指定地址,也不用担心对方卷钱跑路。
由智能合约衍生的玩法还有很多,否则也不能这么火。
问了下GPT,回答如下:
智能合约是区块链技术的一项重要应用,它可以自动执行合同条款,从而提高效率并减少中介成本。以下是一些智能合约的实际应用例子:
金融领域:智能合约可以用于自动化的资产清算、保险理赔和资产交易。例如,它们可以在确定的条件下自动执行支付和结算。
管理领域:在组织管理中,智能合约可以帮助实现透明和自动化的决策过程,如DAO(去中心化自治组织)使用智能合约来管理组织的规则和资金。
医疗领域:智能合约可以用于安全地共享医疗数据,保护患者隐私的同时,提高数据访问和处理的效率¹。
物联网与供应链:智能合约可以用于自动化的物流跟踪、产品真伪验证和库存管理,从而提高供应链的透明度和效率。
共享经济:例如,智能合约可以用于自动处理共享资源的租赁和支付,如共享汽车或共享住宿的支付处理。
投票系统:智能合约可以创建一个安全、透明且不可篡改的投票系统,确保选举的公正性。
代币(Token)是区块链中的一种数字资产,可以代表货币、时间、服务、公司股份、虚拟宠物等各种实物或虚拟事物。代币通常通过智能合约来发行,任何人都可以发行自己的代币。
通过编写智能合约中的函数,可以允许用户将原生加密货币转入合约地址,从而换取一定数量的代币。
代币可以是可互换的(fungible)或不可互换的(non-fungible),取决于它们所代表的实物或虚拟事物的特性。
社区制定了一些标准(如ERC20、ERC721和ERC777)来规范智能合约与其他合约的互操作性。ERC20是用于可互换资产的最常见的代币标准,而ERC721则是用于不可互换代币的标准,通常用于收藏品和游戏。
发行ERC20标准代币:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; //发行代币,代币和原生币的汇率为1比1 contract MyToken is ERC20 { constructor() ERC20("MyToken", "MT") { _mint(msg.sender, 1000000 * (10 ** uint256(decimals()))); } //转账函数 function transfer(address recipient, uint256 amount) public virtual override returns (bool) { require(amount <= balanceOf(msg.sender), "Insufficient balance"); _transfer(_msgSender(), recipient, amount); return true; } //查询地址内余额 function balanceOf(address account) public view returns (uint256) { return super.balanceOf(account); } }
当前,不管是C/S(客户端-服务端)架构还是B/S(浏览器服务端)架构的应用程序,都是用户安装一个前端app或者从浏览器访问网页前端,通过api与企业的服务器进行交互,数据存放在企业自己的数据库中。
Dapp(分布式app),每一个Dapp既是一个前端也是一个节点,用户的数据全部存入去中心化的区块链中,隐私数据可以端到端加密后再存入,没有任何人能修改删除你的数据。可以说,对于去中心化的(分布式)app,典型后端这一说法不再适用。
特征 | Web2应用程序 | Web3应用程序 |
---|---|---|
中心化 | 数据和服务由单一公司或组织控制 | 应用程序运行在区块链上,没有中心化的控制 |
数据所有权 | 用户数据归服务提供商所有 | 用户拥有自己的数据和身份 |
可扩展性 | 交易和操作速度较快 | 可能因为去中心化而速度较慢 |
支付集成 | 调用中心化的第三方支付接口 | 通过原生代币内置支付功能 |
可编程性 | 开放程度有限,自定义程度低 | 图灵完备,可以编写复杂程序 |
限制 | 依赖中心化服务器 | 交易速度慢,用户体验和成本方面有挑战 |
当前大部分Dapp并不是完全体,只是传统前后端+(链端)智能合约。
省略…
潜力巨大,前景广阔,道阻且长。
只能说,祝它成功吧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。