当前位置:   article > 正文

web3系列———2.以太坊与智能合约_智能合约 以太坊

智能合约 以太坊

主流币:

中本聪设计的比特币大获成功后,各种区块链和其对应的加密货币层出不穷,其中不乏新技术的使用,不过大部分的模仿货币最后都销声匿迹了,最终存活并存有大量用户的被称作主流币。

BTC比特币
ETH以太坊
LTC莱特币
XRP瑞波币
USDT (代币)
USDC (代币)
BUSD (代币)
代币是建立在现有区块链平台上的,比如以太坊。你可以用以太币(ETH)来换取这些代币,然后在特定的区块链应用程序中使用它们,就像在游乐园里使用游戏币一样。这些代币没有自己的区块链,它们依赖于别的区块链平台来运行和管理。
  • 1

其中BTC毫无疑问是当今老大,而**ETH(以太坊)**因为其开创了智能合约平台,使区块链进入2.0时代,坐稳老二的位置。
从以太坊开始,区块链技术号称不再局限于加密货币领域,而是推广到整个web行业,催生出web3.0。

如何理解以太坊:

比特币网络中,每一个区块中只有转账记录,是否可以存点别的东西来提高其扩展性?
以太坊创始人Vitalik和其团队,设计了一种脚本语言Solidity和以太坊虚拟机,程序员可以将用这种语言写的代码,打包成字节码,一起存在区块链上。
以太坊的节点客户端都内置了虚拟机,可以执行这个区块中的代码,实现一些自定义操作。

所以以太坊不仅被理解为一种加密货币,也是一个执行代码的平台,这种代码被称为智能合约。

智能合约有什么用:

见仁见智,关键是理解这种想法,无非在前面区块中写死了一些函数代码,可以供后面的区块调用。各种新概念的仍源于区块链的公开性和不可篡改性。比如:

用于募捐:在5天内募集5000个单位的货币。如果在截止日期前没有达到目标金额,合约将自动将资金退还给捐款人
// 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();
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

将这个合约存到区块链中,每一个人就可以调用里面的函数来捐钱到指定地址,也不用担心对方卷钱跑路。

由智能合约衍生的玩法还有很多,否则也不能这么火。
问了下GPT,回答如下:
智能合约是区块链技术的一项重要应用,它可以自动执行合同条款,从而提高效率并减少中介成本。以下是一些智能合约的实际应用例子:

  1. 金融领域:智能合约可以用于自动化的资产清算、保险理赔和资产交易。例如,它们可以在确定的条件下自动执行支付和结算。

  2. 管理领域:在组织管理中,智能合约可以帮助实现透明和自动化的决策过程,如DAO(去中心化自治组织)使用智能合约来管理组织的规则和资金。

  3. 医疗领域:智能合约可以用于安全地共享医疗数据,保护患者隐私的同时,提高数据访问和处理的效率¹。

  4. 物联网与供应链:智能合约可以用于自动化的物流跟踪、产品真伪验证和库存管理,从而提高供应链的透明度和效率。

  5. 共享经济:例如,智能合约可以用于自动处理共享资源的租赁和支付,如共享汽车或共享住宿的支付处理。

  6. 投票系统:智能合约可以创建一个安全、透明且不可篡改的投票系统,确保选举的公正性。

代币与如何发行代币:

代币(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);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

web3分布式应用程序(Dapp):

当前,不管是C/S(客户端-服务端)架构还是B/S(浏览器服务端)架构的应用程序,都是用户安装一个前端app或者从浏览器访问网页前端,通过api与企业的服务器进行交互,数据存放在企业自己的数据库中。

Dapp(分布式app),每一个Dapp既是一个前端也是一个节点,用户的数据全部存入去中心化的区块链中,隐私数据可以端到端加密后再存入,没有任何人能修改删除你的数据。可以说,对于去中心化的(分布式)app,典型后端这一说法不再适用。

特征Web2应用程序Web3应用程序
中心化数据和服务由单一公司或组织控制应用程序运行在区块链上,没有中心化的控制
数据所有权用户数据归服务提供商所有用户拥有自己的数据和身份
可扩展性交易和操作速度较快可能因为去中心化而速度较慢
支付集成调用中心化的第三方支付接口通过原生代币内置支付功能
可编程性开放程度有限,自定义程度低图灵完备,可以编写复杂程序
限制依赖中心化服务器交易速度慢,用户体验和成本方面有挑战

Dapp发展现状:

当前大部分Dapp并不是完全体,只是传统前后端+(链端)智能合约。
省略…

潜力巨大,前景广阔,道阻且长。
只能说,祝它成功吧!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/943800
推荐阅读
相关标签
  

闽ICP备14008679号