以太坊入门【详解】

以太坊的组成部分

  • P2P网络:以太坊在以太坊网络上运行,该网络可在TCP端口30303上寻址,并运行一个协议。
  • 交易:以太坊交易时网络消息,其中包括发送者,接受者,值和数据的有效载荷
  • 以太坊虚拟机:这是一个执行字节码的基于堆栈的虚拟机
  • 数据库:以太坊的区块链被称为数据库,本地存储在每个节点上,包含序列化后的交易和系统交易
  • 客户端:以太坊有几种可互操作的客户端软件实现

以太坊的组成部分

  • 账户
    • 普通账户,存储和代码均为空
    • 合约账户,包含存储和代码
  • 地址
  • 交易
    • 可以发送以太币和信息
    • 向合约发送的交易可以调用合约代码,并以信息数据为函数参数
    • 向空用户发送信息,可以自动生成以信息为代码块的合约账户
  • gas:以太坊用于执行智能合约的虚拟燃料,也就是以太币交易的手续费

以太坊的货币

  • 以太坊的货币单位成为以太(ether),又可以称为ETH

代币

  • 代币(token)被称为通证,本意为令牌,代表有所有权的资产、货币、权限等在区块链上的抽象
  • 可代替通证
  • 非同质通证

MetaMask数字钱包

私钥?:965ed69e03a652eeb7d43ac461f8dd3306a6f3b27f64971b929a401ed966f370

INFURA水龙头网站密码:enfadfhaweiwer32#Dfsdh

使用Solidity编写智能合约

在以太坊上使用 Solidity 编写的智能合约执行每一步操作都需要燃烧一定数量的 Gas

  • Remix写一个水龙头合约

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Faucet {
    // 以太币的默认发送数量
    uint public constant faucetAmount = 0.001 ether;

    // 向调用者发送以太币
    function withdraw() public {
        require(address(this).balance >= faucetAmount, "Not enough funds in the faucet");
        payable(msg.sender).transfer(faucetAmount);
    }

    // 获取当前合约的余额
    function getBal