以太坊交易类型

以太坊交易类型

交易(Transaction)是指由一个外部账户转移一定资产给某个账户, 或者发出一个消息指令到某个智能合约。

在以太坊网络中,交易执行属于一个事务,具有原子性、一致性、隔离性、持久性特点。

交易数据结构

外部账户可以创建交易,用自己的私钥进行签名之发送消息给另一个外部账户或合约账户。两个外部账户之间传送的消息即为转账操作。从外部账户到合约账户的消息会激活合约账户的代码,执行各种操作,也就是我们常说的调用智能合约。可以通过向0地址发起交易来创建合约账户。交易包含以下主要字段:

Type:交易的类型,ContractCreation(创建合约)还是MessageCall(调用合约或转账)

nonce: 发送地址的交易计数

gasPrice:为交易付出的Gas价格

gas:为交易付出的gas

to:接受方地址, 若to为空,表示创建合约

value: 向目标账户发送的金额

Input:交易的附加数据

R, S, V:交易签名结构体

代码实现

// core/types/transaction.go:38

type Transaction struct {

data txdata

// caches

hash atomic.Value

size atomic.Value

from atomic.Value

}

type txdata struct {

AccountNonce uint64

Price *big.Int

GasLimit uint64

Recipient *common.Address

Amount *big.Int

Payload []byte

// Signature values

V *big.Int

R *big.Int

S *big.Int

// This is only used when marshaling to JSON.

Hash *common.Hash `json:"hash" rlp:"-"`

}

JSON格式化

{

"nonce": "0x16",

"gasPrice": "0x2",

"gas": "0x1",

"to": "0x0100000000000000000000000000000000000000",

"value": "0x0",

"input": "0x616263646566",

"v": "0x25",

"r": "0x3c46a1ff9d0dd2129a7f8fbc3e45256d85890d9d63919b42dac1eb8dfa443a32",

"s": "0x6b2be3f225ae31f7ca18efc08fa403eb73b848359a63cd9fdeb61e1b83407690",

"hash": "0xb848eb905affc383b4f431f8f9d3676733ea96bcae65638c0ada6e45038fb3a6"

}

EIP155签名

采用secp256k1对交易进行签名:

交易接口

eth_signTransaction

对交易进行签名,随后用 eth_sendRawTransaction 提交到网络上。

相关参数为:

from: 20字节,发送方地址;

to: 20字节,接收方地址,当为空时,为创建合约交易;

gas: 可选项,默认为90000;

gasPrice: 可选项;

value: 可选项,交易金额;

data: 编译的合约代码 或者是调用函数的签名和编码的参数;

nonce: 可选项, 可以覆盖同一nonce的pending交易。

返回值:

签名名的交易对象。

示例:

// Request

curl -X POST --data '{

"id": 1,

"jsonrpc": "2.0",

"method": "eth_signTransaction",

"params": [{

"data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",

"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",

"gas": "0x76c0",

"gasPrice": "0x9184e72a000",

"to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",

"value": "0x9184e72a"

}]

}'

// Result

{

"id": 1,

"jsonrpc": "2.0",

"result": "0xa3f20717a250c2b0b729b7e5becbff67fdaef7e0699da4de7ca5895b02a170a12d887fd3b17bfdce3481f10bea41f45ba9f709d39ce8325427b57afcfc994cee1b"

}

eth_sendTransaction

创建消息调用交易,或者data域中包含代码的时候,为合约创建的交易。

相关参数为:

from: 20字节,发送方地址;

to: 20字节,接收方地址,当为空时,为创建合约交易;

gas: 可选项,默认为90000;

gasPrice: 可选项;

value: 可选项,交易金额;

data: 编译的合约代码 或者是调用函数的签名和编码的参数;

nonce: 可选项, 可以覆盖同一nonce的pending交易。

返回值:

交易的Hash值。

示例:

// Request

curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendTransaction","params":

[{

"from": "0xb60e8dd61c5d32be8058bb8eb970870f07233155",

"to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567",

"gas": "0x76c0", // 30400

"gasPrice": "0x9184e72a000", // 10000000000000

"value": "0x9184e72a", // 2441406250

"data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"

}],

"id":1}'

// Result

{

"id":1,

"jsonrpc": "2.0",

"result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"

}

eth_sendRawTransaction

创建消息调用的交易或者合约创建的已经签名的交易。

参数:

DATA: 签名的交易数据

返回值:

DATA: 32字节,交易的hash值。

// Request

curl -X POST --data '{"jsonrpc":"2.0","method":"eth_sendRawTransaction","params":

["0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675"],

"id":1}'

// Result

{

"id":1,

"jsonrpc": "2.0",

"result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"

}

参考

https://eth.wiki/json-rpc/API

https://learnblockchain.cn/books/geth/part1/transaction.html

https://learnblockchain.cn/books/geth/part3/sign-and-valid.html

相关灵感

beat365简易版网页 金三胖為什麼開始作 - 博客

金三胖為什麼開始作 - 博客

📅 10-03 👁️ 9699
beat365简易版网页 win11怎么设置微信闪烁的颜色 Win11任务栏微信提示颜色修改教程
365bet世界杯官网 支付宝付款到账时间详解:影响因素及解决方法
beat365简易版网页 一人民币等于多少卢布

一人民币等于多少卢布

📅 09-29 👁️ 3865
beat365简易版网页 世界杯期间如何正确熬夜看球

世界杯期间如何正确熬夜看球

📅 08-31 👁️ 8286
365bet世界杯官网 支持手柄游戏哪些值得玩 人气高的支持手柄游戏推荐
Bet体育365提款验证 王薇薇 同名 Vera Wang Vera Wang, 2002
365bet世界杯官网 《SCIENCE OF THE TOTAL ENVIRONMENT》数据统计
365bet世界杯官网 电脑软件提示更新可以不更新吗?为什么要更新软件?