目录
- Provider 提供者
- Signer 签名者
- Transaction 交易
- Contract 合约
- Receipt 收据
首先,从高层次上对可用对象的类型及其负责的内容有一个基本的了解是很有用的。
Provider 提供者
一个 Provider
是与区块链的只读连接,允许查询区块链状态,例如帐户、区块或交易详细信息,查询事件日志或使用调用评估只读代码。
如果您来自 Web3.js,您会习惯于提供读写访问权限的Provider
。在 Ethers 中,所有写操作都被进一步抽象为另一个对象,即Signer
。
Signer 签名者
一个 Signer
包装与帐户交互的所有操作。帐户通常在某处有一个私钥,可用于对各种类型的有效负载进行签名。
私钥可能位于内存中(使用 Wallet
)或通过某些 IPC 层进行保护,例如 MetaMask,它代理从网站到浏览器插件的交互,从而使私钥远离网站,并且仅在请求用户许可并收到授权后才允许交互。
Transaction 交易
要对区块链进行任何状态更改,需要进行交易,这需要支付费用,其中费用涵盖执行交易(例如读取磁盘和执行数学)和存储更新信息的相关成本。
如果交易恢复,仍然必须支付费用,因为验证者仍然必须花费资源来尝试运行交易以确定它已恢复,并且仍然记录其失败的详细信息。
交易包括从一个用户向另一个用户发送以太币、部署合约
或针对合约
执行状态更改操作。
Contract 合约
一个 Contract
是一个已部署到区块链的程序,其中包含一些代码并分配了可以读取和写入的存储空间。
当它连接到一个 Provider
或者当连接到一个时可以调用状态改变操作 Signer
。
Receipt 收据
一旦交易
被提交到区块链,它就会被放置在内存池(mempool)中,直到验证者决定将其包含在内。
交易只有在被包含在区块链中后才会发生更改,此时会收到收据,其中包含有关交易的详细信息,例如包含在哪个区块中、实际支付的费用、使用的 Gas 以及所有事件它发出了什么以及它是否成功或恢复。