深入学习以太坊(远程连接客户端、以太坊账户)
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
查询客户端的版本,如下图所示。
使用curl -X POST -H "Content-Type: application/json" --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://localhost:8545
查看blockNumber,如下图所示。
2. 以太坊账户
- 每个账户包括了一个balance和以太坊特殊定义的数据(代码和内部存储)
- 如果发送账户有足够的余额来支付,则交易有效。
- 如果接收账户有相关代码,则代码会自动运行,并且它的内部存储也可能被更改,或者代码还可能向其他账户发送额外的消息,导致其他资金变化。
- 以太坊账户模式优点:
- 可以节省大量空间:合为一个账户;每个交易只需要一个输入、一个签名并产生一个输出。
- 更好的可替代性:货币本质上都是同质化、可替代的。
- 更加简单:更容易编码和理解,特别是设计复杂脚本的时候。
- 便于维护持久轻节点:只要沿着特定方向扫描状态树,轻节点可以很容易地随时访问账户相关的所有数据。
BitCoin | Ethereum | |
---|---|---|
设计定位 | 现金系统 | 去中心化应用平台 |
数据组成 | 交易列表(账本) | 交易和账户状态 |
交易对象 | UTXO | Accounts |
代码控制 | 脚本 | 智能合约 |
- 以太坊账户类型
- 外部账户(Externally owned account,EOA)
- 有对应的以太币余额
- 可发送交易(转币或触发合约代码)
- 由用户私钥控制
- 没有关联代码
- 合约账户(Contract accounts)
- 有对应的以太币余额
- 有关联代码
- 由代码控制
- 可通过交易或来自其他合约的调用信息来触发代码执行
- 执行代码时可以操作自己的存储空间,也可以调用其他合约
- 外部账户(Externally owned account,EOA)
3. 其他相关概念
- 以太坊交易
- 签名的数据包,由EOA发送到另一个账户
- 接收方地址
- 发送发签名
- 金额(VALUE)
- 数据(DATA)
- START GAS
- GAS PRICE
- 签名的数据包,由EOA发送到另一个账户
- 消息
- 合约可以向其他合约发送“消息”;合约调用另一个合约,传递“消息”。
- 消息是不会被序列化的虚拟对象,只存在于以太坊执行环境(EVM)中
- 可以看作函数调用
- 消息发送发
- 消息接收方
- 金额
- 数据
- START GAS
- 合约
- 可以读/写自己的内部存储(32字节key-value数据库)
- 可向其他合约发送消息,非异步依次执行
- 一旦合约运行结束,并且由它发送的消息触发的所有自执行结束,EVM就会终止运行,直到下次交易唤醒
- 合约应用
- 第一类:数据存储(账本)例:模拟货币的合约(代币)
- 第二类:通过合约实现一种具有更复杂的访问策略的普通账户(EOA),称为“转发合同”例:钱包合约
- 第三类:管理多个用户之间的持续合同或关系例:金融合同
Leave a Reply