fix: failing test and check --all-targets in ci (#560)
* fix: update failing example * ci: check all targets
This commit is contained in:
parent
e72636210c
commit
c08f8ba876
|
@ -14,6 +14,22 @@ env:
|
||||||
RINKEBY_PRIVATE_KEY: ${{ secrets.RINKEBY_PRIVATE_KEY }}
|
RINKEBY_PRIVATE_KEY: ${{ secrets.RINKEBY_PRIVATE_KEY }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
|
check:
|
||||||
|
name: check all
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Install stable toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
- uses: Swatinem/rust-cache@v1
|
||||||
|
with:
|
||||||
|
cache-on-failure: true
|
||||||
|
- name: cargo check
|
||||||
|
run: cargo check -p ethers --all-targets --all-features
|
||||||
|
|
||||||
tests:
|
tests:
|
||||||
name: ethereum tests
|
name: ethereum tests
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
|
@ -84,6 +84,7 @@ impl<R> ResponseData<R> {
|
||||||
|
|
||||||
impl ResponseData<serde_json::Value> {
|
impl ResponseData<serde_json::Value> {
|
||||||
/// Encode the error to json value if it is an error
|
/// Encode the error to json value if it is an error
|
||||||
|
#[allow(dead_code)]
|
||||||
pub fn into_value(self) -> serde_json::Result<serde_json::Value> {
|
pub fn into_value(self) -> serde_json::Result<serde_json::Value> {
|
||||||
match self {
|
match self {
|
||||||
ResponseData::Success { result } => Ok(result),
|
ResponseData::Success { result } => Ok(result),
|
||||||
|
|
|
@ -393,6 +393,15 @@ impl CompilerOutput {
|
||||||
OutputDiagnostics { errors: &self.errors, ignored_error_codes }
|
OutputDiagnostics { errors: &self.errors, ignored_error_codes }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Finds the first contract with the given name
|
||||||
|
pub fn find(&self, contract: impl AsRef<str>) -> Option<CompactContractRef> {
|
||||||
|
let contract = contract.as_ref();
|
||||||
|
self.contracts
|
||||||
|
.values()
|
||||||
|
.find_map(|contracts| contracts.get(contract))
|
||||||
|
.map(CompactContractRef::from)
|
||||||
|
}
|
||||||
|
|
||||||
/// Given the contract file's path and the contract's name, tries to return the contract's
|
/// Given the contract file's path and the contract's name, tries to return the contract's
|
||||||
/// bytecode, runtime bytecode, and abi
|
/// bytecode, runtime bytecode, and abi
|
||||||
pub fn get(&self, path: &str, contract: &str) -> Option<CompactContractRef> {
|
pub fn get(&self, path: &str, contract: &str) -> Option<CompactContractRef> {
|
||||||
|
@ -474,6 +483,24 @@ pub struct CompactContract {
|
||||||
pub bin_runtime: Option<Bytes>,
|
pub bin_runtime: Option<Bytes>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl CompactContract {
|
||||||
|
/// Returns the contents of this type as a single
|
||||||
|
pub fn into_parts(self) -> (Option<Abi>, Option<Bytes>, Option<Bytes>) {
|
||||||
|
(self.abi, self.bin, self.bin_runtime)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the individual parts of this contract.
|
||||||
|
///
|
||||||
|
/// If the values are `None`, then `Default` is returned.
|
||||||
|
pub fn into_parts_or_default(self) -> (Abi, Bytes, Bytes) {
|
||||||
|
(
|
||||||
|
self.abi.unwrap_or_default(),
|
||||||
|
self.bin.unwrap_or_default(),
|
||||||
|
self.bin_runtime.unwrap_or_default(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl From<Contract> for CompactContract {
|
impl From<Contract> for CompactContract {
|
||||||
fn from(c: Contract) -> Self {
|
fn from(c: Contract) -> Self {
|
||||||
let (bin, bin_runtime) = if let Some(evm) = c.evm {
|
let (bin, bin_runtime) = if let Some(evm) = c.evm {
|
||||||
|
@ -486,8 +513,14 @@ impl From<Contract> for CompactContract {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> From<CompactContractRef<'a>> for CompactContract {
|
||||||
|
fn from(c: CompactContractRef<'a>) -> Self {
|
||||||
|
Self { abi: c.abi.cloned(), bin: c.bin.cloned(), bin_runtime: c.bin_runtime.cloned() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Helper type to serialize while borrowing from `Contract`
|
/// Helper type to serialize while borrowing from `Contract`
|
||||||
#[derive(Clone, Debug, Serialize)]
|
#[derive(Copy, Clone, Debug, Serialize)]
|
||||||
pub struct CompactContractRef<'a> {
|
pub struct CompactContractRef<'a> {
|
||||||
pub abi: Option<&'a Abi>,
|
pub abi: Option<&'a Abi>,
|
||||||
#[serde(default, skip_serializing_if = "Option::is_none")]
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
|
@ -496,6 +529,20 @@ pub struct CompactContractRef<'a> {
|
||||||
pub bin_runtime: Option<&'a Bytes>,
|
pub bin_runtime: Option<&'a Bytes>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a> CompactContractRef<'a> {
|
||||||
|
/// Clones the referenced values and returns as tuples
|
||||||
|
pub fn into_parts(self) -> (Option<Abi>, Option<Bytes>, Option<Bytes>) {
|
||||||
|
CompactContract::from(self).into_parts()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the individual parts of this contract.
|
||||||
|
///
|
||||||
|
/// If the values are `None`, then `Default` is returned.
|
||||||
|
pub fn into_parts_or_default(self) -> (Abi, Bytes, Bytes) {
|
||||||
|
CompactContract::from(self).into_parts_or_default()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'a> From<&'a Contract> for CompactContractRef<'a> {
|
impl<'a> From<&'a Contract> for CompactContractRef<'a> {
|
||||||
fn from(c: &'a Contract) -> Self {
|
fn from(c: &'a Contract) -> Self {
|
||||||
let (bin, bin_runtime) = if let Some(ref evm) = c.evm {
|
let (bin, bin_runtime) = if let Some(ref evm) = c.evm {
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use ethers::{
|
use ethers::{prelude::*, utils::Ganache};
|
||||||
prelude::*,
|
use std::{convert::TryFrom, path::Path, sync::Arc, time::Duration};
|
||||||
utils::{compile_and_launch_ganache, Ganache, Solc},
|
|
||||||
};
|
|
||||||
use std::{convert::TryFrom, sync::Arc, time::Duration};
|
|
||||||
|
|
||||||
// Generate the type-safe contract bindings by providing the ABI
|
// Generate the type-safe contract bindings by providing the ABI
|
||||||
// definition in human readable format
|
// definition in human readable format
|
||||||
|
@ -17,11 +14,14 @@ abigen!(
|
||||||
async fn main() -> Result<()> {
|
async fn main() -> Result<()> {
|
||||||
// 1. compile the contract (note this requires that you are inside the `examples` directory) and
|
// 1. compile the contract (note this requires that you are inside the `examples` directory) and
|
||||||
// launch ganache
|
// launch ganache
|
||||||
let (compiled, ganache) =
|
let ganache = Ganache::new().spawn();
|
||||||
compile_and_launch_ganache(Solc::new("**/contract.sol"), Ganache::new()).await?;
|
|
||||||
|
|
||||||
let contract = compiled.get("SimpleStorage").expect("could not find contract");
|
// set the path to the contract, `CARGO_MANIFEST_DIR` points to the directory containing the
|
||||||
dbg!("OK");
|
// manifest of `ethers`. which will be `../` relative to this file
|
||||||
|
let source = Path::new(&env!("CARGO_MANIFEST_DIR")).join("examples/contract.sol");
|
||||||
|
let compiled = Solc::default().compile_source(source).expect("Could not compile contracts");
|
||||||
|
let (abi, bytecode, _runtime_bytecode) =
|
||||||
|
compiled.find("SimpleStorage").expect("could not find contract").into_parts_or_default();
|
||||||
|
|
||||||
// 2. instantiate our wallet
|
// 2. instantiate our wallet
|
||||||
let wallet: LocalWallet = ganache.keys()[0].clone().into();
|
let wallet: LocalWallet = ganache.keys()[0].clone().into();
|
||||||
|
@ -35,8 +35,7 @@ async fn main() -> Result<()> {
|
||||||
let client = Arc::new(client);
|
let client = Arc::new(client);
|
||||||
|
|
||||||
// 5. create a factory which will be used to deploy instances of the contract
|
// 5. create a factory which will be used to deploy instances of the contract
|
||||||
let factory =
|
let factory = ContractFactory::new(abi, bytecode, client.clone());
|
||||||
ContractFactory::new(contract.abi.clone(), contract.bytecode.clone(), client.clone());
|
|
||||||
|
|
||||||
// 6. deploy it with the constructor arguments
|
// 6. deploy it with the constructor arguments
|
||||||
let contract = factory.deploy("initial value".to_string())?.legacy().send().await?;
|
let contract = factory.deploy("initial value".to_string())?.legacy().send().await?;
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
use ethers::prelude::*;
|
|
||||||
use std::time::Duration;
|
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
#[cfg(feature = "ipc")]
|
#[cfg(feature = "ipc")]
|
||||||
async fn main() -> anyhow::Result<()> {
|
async fn main() -> anyhow::Result<()> {
|
||||||
let provider =
|
use ethers::prelude::*;
|
||||||
Provider::connect_ipc("~/.ethereum/geth.ipc").await?.interval(Duration::from_millis(2000));
|
|
||||||
|
let provider = Provider::connect_ipc("~/.ethereum/geth.ipc")
|
||||||
|
.await?
|
||||||
|
.interval(std::time::Duration::from_millis(2000));
|
||||||
let block = provider.get_block_number().await?;
|
let block = provider.get_block_number().await?;
|
||||||
println!("Current block: {}", block);
|
println!("Current block: {}", block);
|
||||||
let mut stream = provider.watch_blocks().await?.stream();
|
let mut stream = provider.watch_blocks().await?.stream();
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
#[cfg(feature = "ledger")]
|
#[cfg(feature = "ledger")]
|
||||||
async fn main() -> anyhow::Result<()> {
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
use ethers::{prelude::*, utils::parse_ether};
|
use ethers::{prelude::*, utils::parse_ether};
|
||||||
|
|
||||||
// Connect over websockets
|
// Connect over websockets
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
#[cfg(feature = "yubi")]
|
#[cfg(feature = "yubi")]
|
||||||
async fn main() -> anyhow::Result<()> {
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
use ethers::{prelude::*, utils::parse_ether};
|
use ethers::{prelude::*, utils::parse_ether};
|
||||||
use yubihsm::{Connector, Credentials, UsbConfig};
|
use yubihsm::{Connector, Credentials, UsbConfig};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue