Crate quorum_vault_client
source ·Expand description
§Quorum Vault Client
A Rust client for the Quorum Vault Plugin API.
This client based on the Vault Client.
The following backends are supported:
- Ethereum
- Create Ethereum Account
- List Ethereum Accounts
- Read Ethereum Account by Address
- Sign Ethereum Transaction (only Legacy)
- Keys
- Create Key
- List Keys
- Read Key
- Delete Key
- Sign Data
- Import Private Key
§Installation
Add the following to your Cargo.toml
:
[dependencies]
quorum-vault-client = "0.1.0"
§Usage
§Basic
The client is used to configure the connection to Vault and is required to be passed to all API calls for execution. Behind the scenes it uses an asynchronous client from Reqwest for communicating to Vault.
use quorum_vault_client::{Client, VaultClient, VaultClientSettingsBuilder};
// Create a client
let client = VaultClient::new(
VaultClientSettingsBuilder::default()
.address("https://127.0.0.1:8200")
.token("TOKEN")
.build()
.unwrap()
).unwrap();
§Ethereum
Create new Ethereum Wallet
The following example creates a new Ethereum Wallet in the Vault.
use quorum_vault_client::{Client, VaultClient, VaultClientSettingsBuilder};
#[tokio::main]
async fn main() {
// Create a client
let client = VaultClient::new(
VaultClientSettingsBuilder::default()
.address("https://127.0.0.1:8200")
.token("TOKEN")
.build()
.unwrap()
).unwrap();
// By default the plugin mounts the Ethereum backend at the path "quorum"
let created_account = quorum_vault_client::api::ethereum::create_account(&client, "quorum").await.unwrap();
println!("result: {:?}", created_account);
}
Result of the execution is the following:
> result: EthereumAccountResponse { address: 0x1a669bad7bda1f553087df8568b8782bcb0023ac, compressed_public_key: "0x020e44fde7435da96f8260788a89d4c37f2b3d96fd936dd978b886de6872d73062", public_key: "0x040e44fde7435da96f8260788a89d4c37f2b3d96fd936dd978b886de6872d730629c94a4803d3073b0bbe9a3d46f201eef5beec04d0e6f464e07704c159edd2c64", namespace: "" }
List all Ethereum Wallets
The following example gets list of all Ethereum Wallets in the Vault.
use quorum_vault_client::{Client, VaultClient, VaultClientSettingsBuilder};
#[tokio::main]
async fn main() {
// Create a client
let client = VaultClient::new(
VaultClientSettingsBuilder::default()
.address("https://127.0.0.1:8200")
.token("TOKEN")
.build()
.unwrap()
).unwrap();
let list_accounts = quorum_vault_client::api::ethereum::list_accounts(&client, "quorum").await.unwrap();
println!("result: {:?}", list_accounts);
}
Result of the execution is the following:
> result: EthereumAccountsResponse { keys: [0x1a669bad7bda1f553087df8568b8782bcb0023ac, 0x8d3113e29cb92f44f1762e52d2a0276509b36b82] }
Read Ethereum Wallet
The following example gets the Ethereum Wallet by address.
use quorum_vault_client::{Client, VaultClient, VaultClientSettingsBuilder, Address};
use std::str::FromStr;
#[tokio::main]
async fn main() {
// Create a client
let client = VaultClient::new(
VaultClientSettingsBuilder::default()
.address("https://127.0.0.1:8200")
.token("TOKEN")
.build()
.unwrap()
).unwrap();
let address = Address::from_str("0x8d3113e29CB92F44F1762E52D2a0276509b36b82").unwrap();
let read_account = quorum_vault_client::api::ethereum::read_account(&client, "quorum", address).await.unwrap();
println!("result: {:?}", read_account);
}
Result of the execution is the following:
> result: EthereumAccountResponse { address: 0x8d3113e29cb92f44f1762e52d2a0276509b36b82, compressed_public_key: "0x03b1c069a45b14697567661e6426ab0639f73762d7526765b2bd6891a73d84ebb5", public_key: "0x04b1c069a45b14697567661e6426ab0639f73762d7526765b2bd6891a73d84ebb57e6abbec4c9738a025d1a611e431ecf006227dbf6ca400f85518df70e5d101cb", namespace: "" }
Sign Ethereum Transaction
The following example signs the Ethereum Transaction.
use quorum_vault_client::{Client, VaultClient, VaultClientSettingsBuilder, TransactionRequest, Address, U256};
use std::str::FromStr;
#[tokio::main]
async fn main() {
// Create a client
let client = VaultClient::new(
VaultClientSettingsBuilder::default()
.address("https://127.0.0.1:8200")
.token("TOKEN")
.build()
.unwrap()
).unwrap();
let address = Address::from_str("0x8d3113e29CB92F44F1762E52D2a0276509b36b82").unwrap();
let mut tx: TransactionRequest = TransactionRequest::builder()
.from(address)
.to(address)
.value(U256::from_dec_str("1000000000000000000").unwrap())
.gas(U256::from(21000))
.nonce(U256::from(0))
.build();
tx.gas_price = Some(U256::from(1));
let sign_transaction = quorum_vault_client::api::ethereum::sign_transaction(&client, "quorum", 1, tx).await.unwrap();
println!("result: {:?}", sign_transaction);
}
Result of the execution is the following:
> signature: EthereumSignTransactionResponse { signature: "0xf29001752503d05ae83874193a8d866d49fc897c1a2fcb6229a0c61e4b5663f7097817a26f4c6014bbfd24c484bad9587c9c627c6f70d020f8638a4067bb78e801" }
§Keys
Create Key
The following example creates a new key in the Vault.
use quorum_vault_client::{Client, VaultClient, VaultClientSettingsBuilder};
use quorum_vault_client::api::keys::KeyCryptoAlgorithm;
#[tokio::main]
async fn main() {
// Create a client
let client = VaultClient::new(
VaultClientSettingsBuilder::default()
.address("https://127.0.0.1:8200")
.token("TOKEN")
.build()
.unwrap()
).unwrap();
let created_key = quorum_vault_client::api::keys::create_key(&client, "quorum", "some-id", KeyCryptoAlgorithm::Secp256k1, [("tag".to_string(), "value".to_string())].into_iter().collect()).await.unwrap();
println!("result: {:?}", created_key);
}
Result of the execution is the following:
> result: KeyResponse { created_at: "2023-01-30T09:08:22.217224856Z", curve: "secp256k1", id: "some-id", namespace: "", public_key: "BIwm5UiSGTiXVRlB_rS7qYSzQ6XZbaWfUOJKVicU85q-N7zuAak2JQfAHUs2Sm2WAA7YyWdN7_4UFJFggEa6AKw=", signing_algorithm: "ecdsa", tags: {"tag": "value0"}, updated_at: "2023-01-30T09:08:22.217224856Z", version: 1 }
Read Key
The following example reads the key by id.
use quorum_vault_client::{Client, VaultClient, VaultClientSettingsBuilder};
#[tokio::main]
async fn main() {
// Create a client
let client = VaultClient::new(
VaultClientSettingsBuilder::default()
.address("https://127.0.0.1:8200")
.token("TOKEN")
.build()
.unwrap()
).unwrap();
let key = quorum_vault_client::api::keys::read_key(&client, "quorum", "some-id").await.unwrap();
println!("result: {:?}", key);
}
Result of the execution is the following:
> result: KeyResponse { created_at: "2023-01-30T09:08:22.217224856Z", curve: "secp256k1", id: "some-id", namespace: "", public_key: "BIwm5UiSGTiXVRlB_rS7qYSzQ6XZbaWfUOJKVicU85q-N7zuAak2JQfAHUs2Sm2WAA7YyWdN7_4UFJFggEa6AKw=", signing_algorithm: "ecdsa", tags: {"tag": "value0"}, updated_at: "2023-01-30T09:08:22.217224856Z", version: 1 }
List Keys
The following example lists all keys in the Vault.
use quorum_vault_client::{Client, VaultClient, VaultClientSettingsBuilder};
#[tokio::main]
async fn main() {
// Create a client
let client = VaultClient::new(
VaultClientSettingsBuilder::default()
.address("https://127.0.0.1:8200")
.token("TOKEN")
.build()
.unwrap()
).unwrap();
let keys = quorum_vault_client::api::keys::list_keys(&client, "quorum").await.unwrap();
println!("result: {:?}", keys);
}
Result of the execution is the following:
> result: KeysResponse { keys: ["some-id"] }
Delete Key
The following example deletes the key by id.
use quorum_vault_client::{Client, VaultClient, VaultClientSettingsBuilder};
#[tokio::main]
async fn main() {
// Create a client
let client = VaultClient::new(
VaultClientSettingsBuilder::default()
.address("https://127.0.0.1:8200")
.token("TOKEN")
.build()
.unwrap()
).unwrap();
quorum_vault_client::api::keys::destroy_key(&client, "quorum", "some-id").await.unwrap();
}
Sign data
The following example signs the data by key id.
use quorum_vault_client::{Client, VaultClient, VaultClientSettingsBuilder};
#[tokio::main]
async fn main() {
// Create a client
let client = VaultClient::new(
VaultClientSettingsBuilder::default()
.address("https://127.0.0.1:8200")
.token("TOKEN")
.build()
.unwrap()
).unwrap();
let signature = quorum_vault_client::api::keys::sign(&client, "quorum", "some-id", "some-data".as_bytes()).await.unwrap();
println!("signature: {:?}", signature);
}
Result of the execution is the following:
> signature: SignResponse { signature: "Z1ibkBIGjMLh5pSR5mFZ5NbesrM57g-FGkFr0sbIyIlI_M0BYVN_LD-Nt7x1wUo6AoLQyL0I-z7PD8MsdgmkhQ==" }
Modules§
Structs§
- Access list item
- Serde-friendly
AccountDiff
shadow. - The block type returned from RPC calls. This is generic over a
TX
type. - The block header type returned from RPC calls.
- Ad-Hoc trace API type
- Raw bytes wrapper
- A wrapper type for array of bytes.
- Call response
- Call contract request (eth_call / eth_estimateGas)
- Call Result
- Aux type for Diff::Changed.
- Create response
- Craete Result
- eth chain version, difficulty, and head of chain which soft fork? Olympic, Frontier, Homestead, Metropolis, Serenity, etc.
- The fee history type returned from
eth_feeHistory
call. - Filter
- Filter Builder
- Fixed-size uninterpreted hash type with 20 bytes (160 bits) size.
- Fixed-size uninterpreted hash type with 32 bytes (256 bits) size.
- Fixed-size uninterpreted hash type with 64 bytes (512 bits) size.
- Bloom hash type with 256 bytes (2048 bits) size.
- A log produced by a transaction.
- A diff of some chunk of memory.
- details of a peer
- Stores active peer count, connected count, max connected peers and a list of peers for parity node
- Filter for pending transactions (only openethereum/Parity)
- Filter Builder
- An error parsing a raw signature.
- ip address of both local and remote
- chain protocol info
- pip version, difficulty, and head
- Proof struct returned by eth_getProof method
- Raw bytes of a signed, but not yet sent transaction
- Data for recovering the public address of signed data.
- Reward action
- Struct representing signed data returned from
Accounts::sign
method. - Data for offline signed transaction
- Serde-friendly
StateDiff
shadow. - A diff of some storage value.
- Suicide
- Information about current blockchain syncing operations.
- Trace-Filtering API trace type
- Trace filter
- Trace Filter Builder
- Description of a Transaction, pending or in the chain.
- Transaction data for signing.
- “Receipt” of an executed transaction: details of its execution.
- Send Transaction Parameters
- Trace
- Transaction Pool Content Info
- Transaction Pool Inspect Info
- Transaction Pool Status
- Little-endian large integer type Unsigned 64-bit integer.
- Little-endian large integer type 128-bit unsigned integer.
- Little-endian large integer type 256-bit unsigned integer.
- A record of an executed VM operation.
- A record of the execution of a single VM operation.
- A record of a full VM trace for a CALL/CREATE.
- A client which can be used to execute calls against a Vault server.
- Builder for
VaultClientSettings
. - Miner’s work package
Enums§
- Action
- An external action type.
- Block Identifier
- Block Number
- Call type.
- Serde-friendly
Diff
shadow. - Condition to filter pending transactions
- Recovery message data.
- Response
- Reward type.
- The current state of blockchain syncing operations.
- To Filter
- Description of the type of trace to make
- Represents condition on minimum block number or block timestamp.
- Transaction Identifier
Traits§
- The client interface capabale of interacting with API functions
Type Aliases§
- Access list
- Address
- Index in block