# Test ## Basic types ### common.ClientVersionResponse ```proto message ClientVersionResponse { string version = 1; // 节点客户端版本 } ``` ### TransactionType ```proto enum TransactionType { RECORD = 0; // 通用数据记录 MESSAGE = 1; // 消息 CONTRACT_CREATION = 2; // 合约创建 CONTRACT_INVOCATION = 3; // 合约调用 CONTRACT_STATUS = 4; // 合约状态 } ``` ### Transaction (in Transaction ledger) ```proto message Transaction { bytes block_hash = 1; // 事务所在的区块的哈希,当事务处于待确认状态时为`null` uint32 index = 2; // 事务在区块中的位置 index,当事务处于待确认状态时为`null` bytes hash = 3; // 事务的哈希 TransactionType type = 4; // 事务类型 bytes from = 5; // 发送账户地址 uint64 nonce = 6; // 这条事务之前发送者所发送的事务数量 bytes to = 7; // 接收账户地址,或者调用的合约地址,或者`null`如为合约创建 bytes data = 8; // 数据或合约代码 bytes v = 9; // ECDSA recovery id bytes r = 10; // ECDSA signature r bytes s = 11; // ECDSA signature s } ``` ### Transaction (in Accounting chain) ```proto message Transaction { uint64 block_number = 1; // 事务所在的区块的区块号,当事务处于待确认状态时为`null` bytes block_hash = 2; // 事务所在的区块的哈希,当事务处于待确认状态时为`null` uint32 index = 3; // 事务在区块中的位置index,当事务处于待确认状态时为`null` bytes hash = 4; // 事务的哈希 TransactionType type = 5; // 事务类型 bytes from = 6; // 发送账户地址 uint64 nonce = 7; // 这条事务之前发送者所发送的事务数量 bytes to = 8; // 接收账户地址,或者调用的合约地址,或者`null`如为合约创建 bytes data = 9; // 数据或合约代码 bytes v = 10; // ECDSA recovery id bytes r = 11; // ECDSA signature r bytes s = 12; // ECDSA signature s } ``` ### Block (in Transaction ledger) ```proto message Block { uint64 index = 1; // 事务链本地区块索引,当区块处于待确认状态时为`null` bytes hash = 2; // 区块的哈希,当区块处于待确认状态时为`null` repeated bytes parent_hashes = 3; // 父区块的哈希 repeated bytes witnesses = 4; // 见证者账户地址 int64 timestamp = 5; // 区块产生时的 UNIX 时间戳,单位为秒 uint64 size = 6; // 区块大小的字节数 bytes transactions_root = 7; // 区块的事务树根 repeated Transaction transactions = 8; // 事务对象的数组,或为空 repeated bytes transaction_hashes = 9; // 20字节的交易哈希的数组,或为空 } ``` ### Block (in Accounting chain) ```proto message Block { uint64 number = 1; // 区块号,当区块处于待确认状态时为`null` bytes hash = 2; // 区块的哈希,当区块处于待确认状态时为`null` bytes parent_hash = 3; // 父区块的哈希 repeated bytes witnesses = 4; // 见证者账户地址的数组 int64 timestamp = 5; // 区块产生时的UNIX时间戳 uint64 size = 6; // 区块大小的字节数 bytes transactions_root = 7; // 区块的事务树根 repeated Transaction transactions = 8; // 事务对象的数组,或为空 repeated bytes transaction_hashes = 9; // 20字节的交易哈希的数组,或为空 } ``` --- ## Transaction ledger API ### ClientVersion #### Request ``` google.protobuf.Empty ``` #### Response ``` bdledger.api.common.ClientVersionResponse ``` #### Test cases ##### 1 **Request** ``` (empty) ``` **Response** ```yaml version: 'TxLedgerGo/v0.0.1alpha/darwin/go1.11' ``` --- ### CreateLedger #### Request ```proto message CreateLedgerRequest { string name = 1; } ``` #### Response ```proto message CreateLedgerResponse { bool ok = 1; } ``` #### Test cases ##### 1 **Request** ```yaml name: 'test' ``` **Response** ```yaml ok: true ``` ##### 2 **Request** Client: ```yaml name: null ``` On the wire: ```yaml name: '' (defualt value) ``` **Error** ```yaml code: Code.InvalidArgument message: 'name must not be empty' details: ``` --- ### GetLedgers #### Request ``` google.protobuf.Empty ``` #### Response ```proto message GetLedgersResponse { repeated string ledgers = 1; } ``` #### Test cases ##### 1 **Request** ``` (empty) ``` **Response** ```yaml ledgers: - 'first' - 'second' - 'third' ``` --- ### BlockCount #### Request ```proto message BlockCountRequest { string ledger = 1; } ``` #### Response ```proto message BlockCountResponse { uint64 block_count = 1; } ``` #### Test cases ##### 1 **Request** ```yaml ledger: 'test' ``` **Response** ```yaml block_count: 2018 ``` ##### 2 **Request** Client: ```yaml ledger: null ``` On the wire: ```yaml ledger: '' (defualt value) ``` **Error** ```yaml code: Code.InvalidArgument message: 'ledger must not be empty' details: ``` --- ### GetBlocks #### Request ```proto message GetBlocksRequest { string ledger = 1; uint64 from_index = 2; uint32 count = 3; // Optional, default to 10, max value is 10 bool full_transaction = 4; } ``` #### Response ```proto message GetBlocksResponse { repeated Block blocks = 1; } ``` #### Test cases ##### 1 **Request** ```yaml ledger: 'test' from_index: 2018 count: 1 full_transactions: true ``` **Response** ```yaml blocks: - index: 2018 hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) parent_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: - block_hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) index: 0 hash: 0x0404040404040404040404040404040404040404 (in bytes) type: TransactionType.RECORD from: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) nonce: 2018 to: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) data: 0xdeadbeef (in bytes) v: 0x25 (in bytes) r: 0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea (in bytes) s: 0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c (in bytes) - block_hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) index: 1 hash: 0x1313131313131313131313131313131313131313 (in bytes) type: TransactionType.MESSAGE from: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) nonce: 2019 to: 0xfeedbabefeedbabefeedbabefeedbabefeedbabe (in bytes) data: (empty bytes, default value) v: 0x25 (in bytes) r: 0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea (in bytes) s: 0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c (in bytes) transaction_hashes: ``` ##### 2 **Request** ```yaml ledger: 'test' from_index: 2018 ``` **Response** ```yaml blocks: - index: 2018 hash: 0x0101010101010101010101010101010101010101 (in bytes) parent_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - index: 2019 hash: 0x0202020202020202020202020202020202020202 (in bytes) parent_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - index: 2020 hash: 0x0303030303030303030303030303030303030303 (in bytes) parent_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - index: 2021 hash: 0x0404040404040404040404040404040404040404 (in bytes) parent_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - index: 2022 hash: 0x0505050505050505050505050505050505050505 (in bytes) parent_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - index: 2023 hash: 0x0606060606060606060606060606060606060606 (in bytes) parent_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - index: 2024 hash: 0x0707070707070707070707070707070707070707 (in bytes) parent_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - index: 2025 hash: 0x0808080808080808080808080808080808080808 (in bytes) parent_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - index: 2026 hash: 0x0909090909090909090909090909090909090909 (in bytes) parent_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - index: 2027 hash: 0x1010101010101010101010101010101010101010 (in bytes) parent_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) ``` --- ### SendTransaction #### Request ```proto message SendTransactionRequest { string ledger = 1; message Transaction { TransactionType type = 1; bytes from = 2; bytes to = 3; bytes data = 4; } Transaction transaction = 2; } ``` #### Response ```proto message SendTransactionResponse { bytes hash = 1; } ``` #### Test cases ##### 1 **Request** ```yaml ledger: 'test' transaction: type: TransactionType.MESSAGE from: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) to: 0xfeedbabefeedbabefeedbabefeedbabefeedbabe (in bytes) data: 0xdeadbeef (in bytes) ``` **Response** ```yaml hash: 0xd15ea5edd15ea5edd15ea5edd15ea5edd15ea5edd15ea5edd15ea5edd15ea5ed (in bytes) ``` ##### 2 **Request** ```yaml ledger: 'test' transaction: type: TransactionType.MESSAGE from: null (in bytes) to: 0x50bada55 (in bytes) data: null (in bytes) ``` **Error** ```yaml code: Code.InvalidArgument message: 'Multiple invalid arguments' details: - field_violations: (of type InvalidArgument) - field: 'transaction.from' description: 'from must not be empty' - field: 'transaction.to' description: 'to must be a valid 20-byte address' ``` --- ## Accounting chain API ### ClientVersion #### Request ``` google.protobuf.Empty ``` #### Response ``` bdledger.api.common.ClientVersionResponse ``` #### Test cases ##### 1 **Request** ``` (empty) ``` **Response** ```yaml version: 'AcChainGo/v0.0.1alpha/darwin/go1.11' ``` --- ### BlockNumber #### Request ```proto message BlockNumberRequest { string ledger = 1; } ``` #### Response ```proto message BlockNumberResponse { uint64 block_number = 1; } ``` #### Test cases ##### 1 **Request** ```yaml ledger: 'test' ``` **Response** ```yaml block_number: 2018 ``` ##### 2 **Request** Client: ```yaml ledger: null ``` On the wire: ```yaml ledger: '' (defualt value) ``` **Error** ```yaml code: Code.InvalidArgument message: 'ledger must not be empty' details: ``` --- ### GetBlockByNumber #### Request ```proto message GetBlockByNumberRequest { string ledger = 1; uint64 number = 2; bool full_transaction = 3; } ``` #### Response ``` Block ``` #### Test cases ##### 1 **Request** ```yaml ledger: 'test' number: 2018 full_transaction: true ``` **Response** ```yaml number: 2018 hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) parent_hash: 0xbabefacebabefacebabefacebabefacebabeface (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: - block_number: 2018 block_hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) index: 0 hash: 0x0404040404040404040404040404040404040404 (in bytes) type: TransactionType.RECORD from: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) nonce: 2018 to: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) data: 0xdeadbeef (in bytes) v: 0x25 (in bytes) r: 0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea (in bytes) s: 0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c (in bytes) - block_number: 2018 block_hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) index: 1 hash: 0x1313131313131313131313131313131313131313 (in bytes) type: TransactionType.MESSAGE from: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) nonce: 2019 to: 0xfeedbabefeedbabefeedbabefeedbabefeedbabe (in bytes) data: (empty bytes, default value) v: 0x25 (in bytes) r: 0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea (in bytes) s: 0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c (in bytes) transaction_hashes: ``` ##### 2 **Request** Client: ```yaml ledger: 'test' number: 2018 full_transaction: null ``` On the wire: ```yaml ledger: 'test' number: 2018 full_transaction: false (defualt value) ``` **Response** ```yaml number: 2018 hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) parent_hash: 0xbabefacebabefacebabefacebabefacebabeface (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) ``` --- ### GetBlockByHash #### Request ```proto message GetBlockByHashRequest { string ledger = 1; bytes hash = 2; bool full_transaction = 3; } ``` #### Response ``` Block ``` #### Test cases ##### 1 **Request** ```yaml ledger: 'test' hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) full_transaction: false ``` **Response** ```yaml number: 2018 hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) parent_hash: 0xbabefacebabefacebabefacebabefacebabeface (in bytes) witnesses: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) - 0x5252525252525252525252525252525252525252 (in bytes) timestamp: 2018050400000 size: 20180504 transactions_root: 0x50bada5550bada5550bada5550bada5550bada55 (in bytes) transactions: transaction_hashes: - 0x0404040404040404040404040404040404040404 (in bytes) - 0x1313131313131313131313131313131313131313 (in bytes) ``` --- ### GetTransactionByHash #### Request ```proto message GetTransactionByHashRequest { string ledger = 1; bytes hash = 2; } ``` #### Response ``` Transaction ``` #### Test cases ##### 1 **Request** ```yaml ledger: 'test' hash: 0x0404040404040404040404040404040404040404 (in bytes) ``` **Response** ```yaml block_number: 2018 block_hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) index: 0 hash: 0x0404040404040404040404040404040404040404 (in bytes) type: TransactionType.RECORD from: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) nonce: 2018 to: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) data: 0xdeadbeef (in bytes) v: 0x25 (in bytes) r: 0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea (in bytes) s: 0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c (in bytes) ``` --- ### GetTransactionByBlockNumberAndIndex #### Request ```proto message GetTransactionByBlockNumberAndIndexRequest { string ledger = 1; uint64 block_number = 2; uint32 index = 3; } ``` #### Response ``` Transaction ``` #### Test cases ##### 1 **Request** ```yaml ledger: 'test' block_number: 2018 index: 0 ``` **Response** ```yaml block_number: 2018 block_hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) index: 0 hash: 0x0404040404040404040404040404040404040404 (in bytes) type: TransactionType.RECORD from: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) nonce: 2018 to: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) data: 0xdeadbeef (in bytes) v: 0x25 (in bytes) r: 0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea (in bytes) s: 0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c (in bytes) ``` --- ### GetTransactionByBlockHashAndIndex #### Request ```proto message GetTransactionByBlockHashAndIndexRequest { string ledger = 1; bytes block_hash = 2; uint32 index = 3; } ``` #### Response ``` Transaction ``` #### Test cases ##### 1 **Request** ```yaml ledger: 'test' block_hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) index: 0 ``` **Response** ```yaml block_number: 2018 block_hash: 0xdeadc0dedeadc0dedeadc0dedeadc0dedeadc0de (in bytes) index: 0 hash: 0x0404040404040404040404040404040404040404 (in bytes) type: TransactionType.RECORD from: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) nonce: 2018 to: 0xf00dcafef00dcafef00dcafef00dcafef00dcafe (in bytes) data: 0xdeadbeef (in bytes) v: 0x25 (in bytes) r: 0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea (in bytes) s: 0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c (in bytes) ```