【Web3 后端】区块链基础

一、核心基础概念
  1. 区块链本质:分布式账本技术,由多个节点共同维护的不可篡改的链式数据结构,核心特性包括去中心化、不可篡改、透明可追溯、共识机制。
  2. 区块结构:每个区块包含区块头(前序区块哈希、时间戳、Merkle根、难度值等)和区块体(交易列表),区块通过哈希值串联形成链。
  3. 交易(Transaction):区块链上的价值转移或合约调用指令,包含发送者地址、接收者地址、金额、数据(如合约调用参数)、签名等。
  4. 账户模型
    • EOA(外部拥有账户):由私钥控制的普通账户,可发起交易。
    • 合约账户:由智能合约代码控制的账户,不可主动发起交易,仅响应外部调用。
  5. Gas机制:以太坊等公链中,交易/合约执行需消耗Gas(燃料),Gas价格由用户设置,用于激励节点打包交易,防止恶意代码滥用资源。
  6. 智能合约:部署在区块链上的自动执行代码(如Solidity编写),定义了资产规则或业务逻辑,通过ABI(应用二进制接口)与外部交互。
  7. 主流代币标准
    • ERC20:同质化代币标准,定义了转账(transfer)、授权(approve)等接口,适用于稳定币、平台币等。
    • ERC721:非同质化代币(NFT)标准,定义了tokenURI(元数据)、ownerOf(所有者查询)等接口,适用于数字艺术品、虚拟资产。
  8. 区块链网络
    • 主网:真实资产流通的网络,交易需消耗真实Gas。
    • 测试网(如Sepolia、Goerli):用于开发测试,可通过水龙头获取测试币,不涉及真实资产。
  9. JSON-RPC接口:区块链节点提供的远程调用接口(如eth_getBalance查询余额、eth_sendTransaction发送交易),是后端服务与区块链交互的核心方式。
二、测试题(含答案解析)
一、问答题
  1. 问题:DApp后端服务为何需要监听智能合约的事件(Event)?请举例说明应用场景。
    答案
    智能合约事件是链上状态变更的日志(如转账、NFT铸造),后端服务监听事件可实时同步链上数据到链下数据库,避免频繁主动查询链上数据(降低节点压力,提升效率)。
    应用场景:NFT市场后端监听Transfer事件,实时更新用户持仓列表;DeFi平台监听Deposit事件,更新用户存款余额。

  2. 问题:EOA账户与合约账户的核心区别是什么?DApp后端在处理这两种账户时需注意什么?
    答案

    • 区别:EOA由私钥控制,可主动发起交易;合约账户由代码控制,仅响应外部调用,无私钥。
    • 注意点:向合约账户转账时,需确认合约是否实现receive/fallback函数(否则转账可能失败);调用合约方法时,需通过ABI解析函数参数,而EOA仅需处理简单转账。
  3. 问题:某用户发起ERC20代币转账后,交易状态显示“失败(Out of Gas)”,请分析可能的原因及DApp后端的应对方案。
    答案

    • 原因:用户设置的Gas Limit不足(合约执行消耗的Gas超过设置值),或Gas Price过低导致长时间未被打包。
    • 应对方案:后端可通过eth_estimateGas预估交易所需Gas Limit,提示用户设置合理值;监控交易状态,若失败则返回友好提示(如“Gas不足,请重试”)。
  4. 问题:什么是ABI?DApp后端调用智能合约时,ABI的作用是什么?
    答案
    ABI是智能合约的接口描述(JSON格式),定义了函数名、参数类型、返回值等。
    作用:后端通过ABI将人类可读的函数调用(如transfer(to, amount))编码为区块链可识别的二进制数据,实现与合约的交互;同时将合约返回的二进制数据解码为可读结果。

二、代码题(Golang实现,基于go-ethereum库)
  1. 题目:使用Golang编写一个函数,通过以太坊JSON-RPC接口查询指定EOA账户的ETH余额(单位转换为ETH,而非wei)。
    答案

    package main
    
    import (
        "context"
        "fmt"
        "math/big"
    
        "github.com/ethereum/go-ethereum/ethclient"
    )
    
    // getETHBalance 查询指定地址的ETH余额(返回ETH单位)
    func getETHBalance(client *ethclient.Client, address string) (*big.Float, error) {
         
         
        // 调用eth_getBalance获取余额(单位:wei)
        balanceWei, err := client
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值