ETH交易一般理解都是转账交易,但是这个理解是比较狭隘的。这里谈到的交易是一种广义的交易。
交易的发起者:主要是两类
- 节点服务,geth控制太。
- 调用节点服务,主要是指geth提供RPC接口的客户端,如wallet等。
交易分类:主要是两类
- ETH转账交易
- 其他交易,包含不限于ERC20 Token的转账交易。
交易相关的RPC接口:eth_sendTransaction And eth_sendRawTransaction
这两个函数以需不需调用者手动进行对最终的参数签名作为区分
- eth_sendTransaction:该函数仅用于ETH转账,参数最终的签名不需要调用者手动进行,它会在当前节点中使用已解锁的发起者from的ETH的地址私钥进行签名,因此需要在每次调用该函数进行ETH转账时,需要先解锁from地址。
- eth_sendRawTransaction:需要调用者使用from的私钥进行签名参数数据的交易函数,目前的 ERC20 Token转账交易都使用这个函数。ETH转账一样可以使用该函数进行转账,但转账ETH主要由参数来控制。
交易和智能合约的关系
一开始就说到交易有一种狭隘的理解,就是指智能合约的交易(transfer).
那么,广义的交易和狭隘的交易的关系是怎样的?
首先,转账交易首先是调用eth_sendRawTransaction这个RPC接口,把转账交易需要的参数传给节点,节点拿到数据后,提取每个数据字段,其中就包含eth_sendRawTransaction的data参数,data是一个十六进制字符串,它所组成的内容中,就包含methodId,该Id对应的就是transfer函数的名称化后的值。
接着,再根据to参数找到该智能合约,然后基于data的methodId来找到所指是的函数,最后根据data的参数如转给谁,转多少,执行该函数。
执行函数后,无论执行成功失败,都会返回一个交易哈希值(全称是"Transaction Hash", 简称txHash)
交易参数的说明
1.from
代表的是从哪个地址发起交易,如果交易的to是只能合约地址,那么合约代码中的msg.sender变量代表的就是这个地址from地址。
2.to
代表当前交易的接收地址。注意的是,接收地址不能理解为收款地址,以为to的取值有3种情况:
- 智能合约的地址
当前所发送的交易将会交给对应的智能合约处理,原理和ERC20转账相同。所以在进行ERC20代币转账时,to应该是智能合约的地址。 - 普通ETH用户的钱包地址
就是普通的ETH转账,to