1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271
// Copyright (C) 2019-2021 Aleo Systems Inc. // This file is part of the snarkOS library. // The snarkOS library is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // The snarkOS library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with the snarkOS library. If not, see <https://www.gnu.org/licenses/>. //! Structures for RPC endpoint requests and responses. use jsonrpc_http_server::jsonrpc_core::Metadata; use serde::{Deserialize, Serialize}; use std::net::SocketAddr; /// Defines the authentication format for accessing private endpoints on the RPC server #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct RpcCredentials { /// The username in the credential pub username: String, /// The password in the credential pub password: String, } /// RPC metadata for encoding authentication #[derive(Default, Clone)] pub struct Meta { /// An optional authentication string for protected RPC functions pub auth: Option<String>, } impl Metadata for Meta {} /// Returned value for the `getblock` rpc call #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct BlockInfo { /// Block Hash pub hash: String, /// Block Height pub height: Option<u32>, /// Number of confirmations pub confirmations: u32, /// Block Size pub size: usize, /// Previous block hash pub previous_block_hash: String, /// Merkle root representing the transactions in the block pub merkle_root: String, /// Merkle root of the transactions in the block using a Pedersen hash pub pedersen_merkle_root_hash: String, /// Proof of Succinct Work pub proof: String, /// Block time pub time: i64, /// Block difficulty target pub difficulty_target: u64, /// Nonce pub nonce: u32, /// List of transaction ids pub transactions: Vec<String>, } /// Returned value for the `getblocktemplate` rpc call #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct BlockTemplate { /// Previous block hash pub previous_block_hash: String, /// Block height pub block_height: u32, /// Block timestamp pub time: i64, /// Proof of work difficulty target pub difficulty_target: u64, /// Transactions to include in the block (excluding the coinbase transaction) pub transactions: Vec<String>, /// Amount spendable by the coinbase transaction (block rewards + transaction fees) pub coinbase_value: u64, } /// Output for the `createrawtransaction` rpc call #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct CreateRawTransactionOuput { /// The newly created transaction from calling the `createrawtransaction` endpoint pub encoded_transaction: String, /// The newly created records from calling the `createrawtransaction` endpoint pub encoded_records: Vec<String>, } /// Input for the `decryptrecord` rpc call #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct DecryptRecordInput { /// The encrypted record pub encrypted_record: String, /// The account view key used to decrypt the record pub account_view_key: String, } /// Returned value for the `getnodeinfo` rpc call #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct NodeInfo { /// Flag indicating if the node is operating as a miner pub is_miner: bool, /// Flag indicating if the node is currently syncing pub is_syncing: bool, } /// Returned value for the `getpeerinfo` rpc call #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct PeerInfo { /// The peers connected to this node pub peers: Vec<SocketAddr>, } /// Record payload data #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct RPCRecordPayload { /// Record payload pub payload: String, } /// Returned value for the `decoderawrecord` rpc call #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct RecordInfo { /// The record owner pub owner: String, /// Record is dummy flag pub is_dummy: bool, /// Record value pub value: u64, /// Record payload pub payload: RPCRecordPayload, /// Record birth program id pub birth_program_id: String, /// Record death program id pub death_program_id: String, /// Record serial number nonce pub serial_number_nonce: String, /// Record commitment pub commitment: String, /// Record commitment randomness pub commitment_randomness: String, } /// Output for the `createaccount` rpc call #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct RpcAccount { /// An account private key pub private_key: String, /// An account view key corresponding to the account private key pub view_key: String, /// An account address corresponding to the account private key pub address: String, } /// Returned value for the `gettransaction` rpc call #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct TransactionInfo { /// Transaction id pub txid: String, /// Transaction size pub size: usize, /// Transaction inputs pub old_serial_numbers: Vec<String>, /// Transaction outputs pub new_commitments: Vec<String>, /// Transaction Memo pub memo: String, /// Network id of the transaction pub network_id: u8, /// Merkle tree digest pub digest: String, /// Transaction (outer snark) proof pub transaction_proof: String, /// Program verification key commitment pub program_commitment: String, /// Local data root pub local_data_root: String, /// Transaction value balance pub value_balance: i64, /// Transaction signatures (Delegated DPC) pub signatures: Vec<String>, /// Encrypted records pub encrypted_records: Vec<String>, /// Block the transaction lives in pub transaction_metadata: TransactionMetadata, } /// Input for the `createrawtransaction` rpc call #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct TransactionInputs { /// Encoded records that are being spent pub old_records: Vec<String>, /// Account private keys owning the spent records pub old_account_private_keys: Vec<String>, /// Transaction recipent and amounts pub recipients: Vec<TransactionRecipient>, /// Transaction memo pub memo: Option<String>, /// Network id of the transaction pub network_id: u8, // Attributes that will be relevant for custom programs // pub new_birth_programs: Vec<String>, // pub new_death_programs: Vec<String>, // pub new_payloads: Vec<String>, } /// Additional metadata included with a transaction response #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct TransactionMetadata { /// The block number associated with this transaction pub block_number: Option<u32>, } /// Recipient of a transaction #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)] pub struct TransactionRecipient { /// The recipient's account address pub address: String, /// The amount being sent pub amount: u64, }