一、核心基础概念
- 区块链本质:分布式账本技术,由多个节点共同维护的不可篡改的链式数据结构,核心特性包括去中心化、不可篡改、透明可追溯、共识机制。
- 区块结构:每个区块包含区块头(前序区块哈希、时间戳、Merkle根、难度值等)和区块体(交易列表),区块通过哈希值串联形成链。
- 交易(Transaction):区块链上的价值转移或合约调用指令,包含发送者地址、接收者地址、金额、数据(如合约调用参数)、签名等。
- 账户模型:
- EOA(外部拥有账户):由私钥控制的普通账户,可发起交易。
- 合约账户:由智能合约代码控制的账户,不可主动发起交易,仅响应外部调用。
- Gas机制:以太坊等公链中,交易/合约执行需消耗Gas(燃料),Gas价格由用户设置,用于激励节点打包交易,防止恶意代码滥用资源。
- 智能合约:部署在区块链上的自动执行代码(如Solidity编写),定义了资产规则或业务逻辑,通过ABI(应用二进制接口)与外部交互。
- 主流代币标准:
- ERC20:同质化代币标准,定义了转账(
transfer)、授权(approve)等接口,适用于稳定币、平台币等。 - ERC721:非同质化代币(NFT)标准,定义了
tokenURI(元数据)、ownerOf(所有者查询)等接口,适用于数字艺术品、虚拟资产。
- ERC20:同质化代币标准,定义了转账(
- 区块链网络:
- 主网:真实资产流通的网络,交易需消耗真实Gas。
- 测试网(如Sepolia、Goerli):用于开发测试,可通过水龙头获取测试币,不涉及真实资产。
- JSON-RPC接口:区块链节点提供的远程调用接口(如
eth_getBalance查询余额、eth_sendTransaction发送交易),是后端服务与区块链交互的核心方式。
二、测试题(含答案解析)
一、问答题
-
问题:DApp后端服务为何需要监听智能合约的事件(Event)?请举例说明应用场景。
答案:
智能合约事件是链上状态变更的日志(如转账、NFT铸造),后端服务监听事件可实时同步链上数据到链下数据库,避免频繁主动查询链上数据(降低节点压力,提升效率)。
应用场景:NFT市场后端监听Transfer事件,实时更新用户持仓列表;DeFi平台监听Deposit事件,更新用户存款余额。 -
问题:EOA账户与合约账户的核心区别是什么?DApp后端在处理这两种账户时需注意什么?
答案:- 区别:EOA由私钥控制,可主动发起交易;合约账户由代码控制,仅响应外部调用,无私钥。
- 注意点:向合约账户转账时,需确认合约是否实现
receive/fallback函数(否则转账可能失败);调用合约方法时,需通过ABI解析函数参数,而EOA仅需处理简单转账。
-
问题:某用户发起ERC20代币转账后,交易状态显示“失败(Out of Gas)”,请分析可能的原因及DApp后端的应对方案。
答案:- 原因:用户设置的Gas Limit不足(合约执行消耗的Gas超过设置值),或Gas Price过低导致长时间未被打包。
- 应对方案:后端可通过
eth_estimateGas预估交易所需Gas Limit,提示用户设置合理值;监控交易状态,若失败则返回友好提示(如“Gas不足,请重试”)。
-
问题:什么是ABI?DApp后端调用智能合约时,ABI的作用是什么?
答案:
ABI是智能合约的接口描述(JSON格式),定义了函数名、参数类型、返回值等。
作用:后端通过ABI将人类可读的函数调用(如transfer(to, amount))编码为区块链可识别的二进制数据,实现与合约的交互;同时将合约返回的二进制数据解码为可读结果。
二、代码题(Golang实现,基于go-ethereum库)
-
题目:使用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

最低0.47元/天 解锁文章
737

被折叠的 条评论
为什么被折叠?



