深入学习以太坊(远程连接客户端/以太坊账户)

区块链

深入学习以太坊(远程连接客户端、以太坊账户)

1. JSON-RPC

以太坊客户端提供API和一组远程调用(RPC)命令,这些命令被编码为JSON。这被称为JSON-RPC API。JSON—RPC API作为接口允许我们编写的程序适用以太坊客户端作为网端,访问以太坊网络和链上数据。

RPC接口通过作为HTTP服务,端口为8545.默认下,只允许本机localhost连接。

如果要访问JSON-RPC API,我们可以使用例如web3.js来访问。

运行geth --datadir ./data --networkid 15 --http console,使用curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"web3_clientVersion","params":[],"id":1}' http://localhost:8545查询客户端的版本,如下图所示。

截屏2022-03-12 下午9.40.32

使用curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://localhost:8545查看blockNumber,如下图所示。

截屏2022-03-12 下午9.42.17

2. 以太坊账户

  • 每个账户包括了一个balance和以太坊特殊定义的数据(代码和内部存储)
  • 如果发送账户有足够的余额来支付,则交易有效。
  • 如果接收账户有相关代码,则代码会自动运行,并且它的内部存储也可能被更改,或者代码还可能向其他账户发送额外的消息,导致其他资金变化。
  • 以太坊账户模式优点:
    1. 可以节省大量空间:合为一个账户;每个交易只需要一个输入、一个签名并产生一个输出。
    2. 更好的可替代性:货币本质上都是同质化、可替代的。
    3. 更加简单:更容易编码和理解,特别是设计复杂脚本的时候。
    4. 便于维护持久轻节点:只要沿着特定方向扫描状态树,轻节点可以很容易地随时访问账户相关的所有数据。
  BitCoin Ethereum
设计定位 现金系统 去中心化应用平台
数据组成 交易列表(账本) 交易和账户状态
交易对象 UTXO Accounts
代码控制 脚本 智能合约
  • 以太坊账户类型
    • 外部账户(Externally owned account,EOA)
      • 有对应的以太币余额
      • 可发送交易(转币或触发合约代码)
      • 由用户私钥控制
      • 没有关联代码
    • 合约账户(Contract accounts)
      • 有对应的以太币余额
      • 有关联代码
      • 由代码控制
      • 可通过交易或来自其他合约的调用信息来触发代码执行
      • 执行代码时可以操作自己的存储空间,也可以调用其他合约

3. 其他相关概念

  • 以太坊交易
    • 签名的数据包,由EOA发送到另一个账户
      • 接收方地址
      • 发送发签名
      • 金额(VALUE)
      • 数据(DATA)
      • START GAS
      • GAS PRICE
  • 消息
    • 合约可以向其他合约发送“消息”;合约调用另一个合约,传递“消息”。
    • 消息是不会被序列化的虚拟对象,只存在于以太坊执行环境(EVM)中
    • 可以看作函数调用
      • 消息发送发
      • 消息接收方
      • 金额
      • 数据
      • START GAS
  • 合约
    • 可以读/写自己的内部存储(32字节key-value数据库)
    • 可向其他合约发送消息,非异步依次执行
    • 一旦合约运行结束,并且由它发送的消息触发的所有自执行结束,EVM就会终止运行,直到下次交易唤醒
  • 合约应用
    • 第一类:数据存储(账本)例:模拟货币的合约(代币)
    • 第二类:通过合约实现一种具有更复杂的访问策略的普通账户(EOA),称为“转发合同”例:钱包合约
    • 第三类:管理多个用户之间的持续合同或关系例:金融合同

Leave a Reply

Your email address will not be published.