Fuel Validators (#1474)
* Fuel ABI gen * WIP * Progress * Use HyperlaneDomain * Progress on fuel init * Support unknown domains * Work on handling wallets and signers for fuel * Move signer output test * Work on signers * Fixing up compilation * Update to use HyperlaneDomain * Fixes * WIP * Update Mailbox ABI * Move signer to be in chain conf and change rpc style to implementation * Better loader debugging * WIP * Merge fixes and refactor * Fix "rpcStyle" after merge * Simplify chain mappings * Fix tests * Remove excess runtime deps from validator * Use agent core in scraper and remove DB assumptions * More core cleanup * Remove duplication for checkpoint syncers * Better error messages for debugging * Debugging * Cleanup * remove signers * fmt * Fix after merge * Fixes after merge * Fixes after merge * remove random inclusion * Remove unused files * Requested changes from PR * Simplify deps and update sha3 * Fix after mergepull/1587/head
parent
1748b60f4b
commit
e5e794eda4
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,3 @@ |
||||
use abigen::generate_bindings_for_dir; |
||||
|
||||
fn main() { |
||||
generate_bindings_for_dir("./abis", "./src/contracts"); |
||||
abigen::generate_bindings_for_dir("./abis", "./src/contracts", abigen::BuildType::Ethers); |
||||
} |
||||
|
@ -0,0 +1 @@ |
||||
src/contracts |
@ -0,0 +1,530 @@ |
||||
{ |
||||
"types": [ |
||||
{ |
||||
"typeId": 0, |
||||
"type": "()", |
||||
"components": [], |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 1, |
||||
"type": "(_, _)", |
||||
"components": [ |
||||
{ |
||||
"name": "__tuple_element", |
||||
"type": 2, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "__tuple_element", |
||||
"type": 20, |
||||
"typeArguments": null |
||||
} |
||||
], |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 2, |
||||
"type": "b256", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 3, |
||||
"type": "bool", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 4, |
||||
"type": "enum Identity", |
||||
"components": [ |
||||
{ |
||||
"name": "Address", |
||||
"type": 14, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "ContractId", |
||||
"type": 15, |
||||
"typeArguments": null |
||||
} |
||||
], |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 5, |
||||
"type": "enum Option", |
||||
"components": [ |
||||
{ |
||||
"name": "None", |
||||
"type": 0, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "Some", |
||||
"type": 6, |
||||
"typeArguments": null |
||||
} |
||||
], |
||||
"typeParameters": [ |
||||
6 |
||||
] |
||||
}, |
||||
{ |
||||
"typeId": 6, |
||||
"type": "generic T", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 7, |
||||
"type": "raw untyped ptr", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 8, |
||||
"type": "str[12]", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 9, |
||||
"type": "str[16]", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 10, |
||||
"type": "str[6]", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 11, |
||||
"type": "str[7]", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 12, |
||||
"type": "str[8]", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 13, |
||||
"type": "str[9]", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 14, |
||||
"type": "struct Address", |
||||
"components": [ |
||||
{ |
||||
"name": "value", |
||||
"type": 2, |
||||
"typeArguments": null |
||||
} |
||||
], |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 15, |
||||
"type": "struct ContractId", |
||||
"components": [ |
||||
{ |
||||
"name": "value", |
||||
"type": 2, |
||||
"typeArguments": null |
||||
} |
||||
], |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 16, |
||||
"type": "struct Message", |
||||
"components": [ |
||||
{ |
||||
"name": "version", |
||||
"type": 22, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "nonce", |
||||
"type": 20, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "origin", |
||||
"type": 20, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "sender", |
||||
"type": 2, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "destination", |
||||
"type": 20, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "recipient", |
||||
"type": 2, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "body", |
||||
"type": 19, |
||||
"typeArguments": [ |
||||
{ |
||||
"name": "", |
||||
"type": 22, |
||||
"typeArguments": null |
||||
} |
||||
] |
||||
} |
||||
], |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 17, |
||||
"type": "struct OwnershipTransferredEvent", |
||||
"components": [ |
||||
{ |
||||
"name": "previous_owner", |
||||
"type": 5, |
||||
"typeArguments": [ |
||||
{ |
||||
"name": "", |
||||
"type": 4, |
||||
"typeArguments": null |
||||
} |
||||
] |
||||
}, |
||||
{ |
||||
"name": "new_owner", |
||||
"type": 5, |
||||
"typeArguments": [ |
||||
{ |
||||
"name": "", |
||||
"type": 4, |
||||
"typeArguments": null |
||||
} |
||||
] |
||||
} |
||||
], |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 18, |
||||
"type": "struct RawVec", |
||||
"components": [ |
||||
{ |
||||
"name": "ptr", |
||||
"type": 7, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "cap", |
||||
"type": 21, |
||||
"typeArguments": null |
||||
} |
||||
], |
||||
"typeParameters": [ |
||||
6 |
||||
] |
||||
}, |
||||
{ |
||||
"typeId": 19, |
||||
"type": "struct Vec", |
||||
"components": [ |
||||
{ |
||||
"name": "buf", |
||||
"type": 18, |
||||
"typeArguments": [ |
||||
{ |
||||
"name": "", |
||||
"type": 6, |
||||
"typeArguments": null |
||||
} |
||||
] |
||||
}, |
||||
{ |
||||
"name": "len", |
||||
"type": 21, |
||||
"typeArguments": null |
||||
} |
||||
], |
||||
"typeParameters": [ |
||||
6 |
||||
] |
||||
}, |
||||
{ |
||||
"typeId": 20, |
||||
"type": "u32", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 21, |
||||
"type": "u64", |
||||
"components": null, |
||||
"typeParameters": null |
||||
}, |
||||
{ |
||||
"typeId": 22, |
||||
"type": "u8", |
||||
"components": null, |
||||
"typeParameters": null |
||||
} |
||||
], |
||||
"functions": [ |
||||
{ |
||||
"inputs": [], |
||||
"name": "count", |
||||
"output": { |
||||
"name": "", |
||||
"type": 20, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"inputs": [ |
||||
{ |
||||
"name": "message_id", |
||||
"type": 2, |
||||
"typeArguments": null |
||||
} |
||||
], |
||||
"name": "delivered", |
||||
"output": { |
||||
"name": "", |
||||
"type": 3, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"inputs": [ |
||||
{ |
||||
"name": "destination_domain", |
||||
"type": 20, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "recipient", |
||||
"type": 2, |
||||
"typeArguments": null |
||||
}, |
||||
{ |
||||
"name": "message_body", |
||||
"type": 19, |
||||
"typeArguments": [ |
||||
{ |
||||
"name": "", |
||||
"type": 22, |
||||
"typeArguments": null |
||||
} |
||||
] |
||||
} |
||||
], |
||||
"name": "dispatch", |
||||
"output": { |
||||
"name": "", |
||||
"type": 2, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"inputs": [], |
||||
"name": "get_default_ism", |
||||
"output": { |
||||
"name": "", |
||||
"type": 15, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"inputs": [], |
||||
"name": "latest_checkpoint", |
||||
"output": { |
||||
"name": "", |
||||
"type": 1, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"inputs": [ |
||||
{ |
||||
"name": "metadata", |
||||
"type": 19, |
||||
"typeArguments": [ |
||||
{ |
||||
"name": "", |
||||
"type": 22, |
||||
"typeArguments": null |
||||
} |
||||
] |
||||
}, |
||||
{ |
||||
"name": "_message", |
||||
"type": 16, |
||||
"typeArguments": null |
||||
} |
||||
], |
||||
"name": "process", |
||||
"output": { |
||||
"name": "", |
||||
"type": 0, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"inputs": [], |
||||
"name": "root", |
||||
"output": { |
||||
"name": "", |
||||
"type": 2, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"inputs": [ |
||||
{ |
||||
"name": "module", |
||||
"type": 15, |
||||
"typeArguments": null |
||||
} |
||||
], |
||||
"name": "set_default_ism", |
||||
"output": { |
||||
"name": "", |
||||
"type": 0, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"inputs": [], |
||||
"name": "owner", |
||||
"output": { |
||||
"name": "", |
||||
"type": 5, |
||||
"typeArguments": [ |
||||
{ |
||||
"name": "", |
||||
"type": 4, |
||||
"typeArguments": null |
||||
} |
||||
] |
||||
} |
||||
}, |
||||
{ |
||||
"inputs": [ |
||||
{ |
||||
"name": "new_owner", |
||||
"type": 5, |
||||
"typeArguments": [ |
||||
{ |
||||
"name": "", |
||||
"type": 4, |
||||
"typeArguments": null |
||||
} |
||||
] |
||||
} |
||||
], |
||||
"name": "transfer_ownership", |
||||
"output": { |
||||
"name": "", |
||||
"type": 0, |
||||
"typeArguments": null |
||||
} |
||||
} |
||||
], |
||||
"loggedTypes": [ |
||||
{ |
||||
"logId": 0, |
||||
"loggedType": { |
||||
"name": "", |
||||
"type": 8, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"logId": 1, |
||||
"loggedType": { |
||||
"name": "", |
||||
"type": 9, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"logId": 2, |
||||
"loggedType": { |
||||
"name": "", |
||||
"type": 12, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"logId": 3, |
||||
"loggedType": { |
||||
"name": "", |
||||
"type": 8, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"logId": 4, |
||||
"loggedType": { |
||||
"name": "", |
||||
"type": 13, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"logId": 5, |
||||
"loggedType": { |
||||
"name": "", |
||||
"type": 11, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"logId": 6, |
||||
"loggedType": { |
||||
"name": "", |
||||
"type": 2, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"logId": 7, |
||||
"loggedType": { |
||||
"name": "", |
||||
"type": 10, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"logId": 8, |
||||
"loggedType": { |
||||
"name": "", |
||||
"type": 10, |
||||
"typeArguments": null |
||||
} |
||||
}, |
||||
{ |
||||
"logId": 9, |
||||
"loggedType": { |
||||
"name": "", |
||||
"type": 17, |
||||
"typeArguments": [] |
||||
} |
||||
} |
||||
], |
||||
"messagesTypes": [] |
||||
} |
@ -0,0 +1,3 @@ |
||||
fn main() { |
||||
abigen::generate_bindings_for_dir("./abis", "./src/contracts", abigen::BuildType::Fuels); |
||||
} |
@ -0,0 +1,56 @@ |
||||
use hyperlane_core::H256; |
||||
|
||||
/// Conversion from a fuel type to H256 primitive.
|
||||
pub trait FuelIntoH256 { |
||||
/// Covert to an H256 primitive.
|
||||
fn into_h256(self) -> H256; |
||||
} |
||||
|
||||
/// Conversion from an H256 primitive to a type to an H256 primitive
|
||||
pub trait FuelFromH256 { |
||||
/// Convert an H256 primitive to this type.
|
||||
fn from_h256(v: &H256) -> Self; |
||||
} |
||||
|
||||
macro_rules! impl_h256 { |
||||
($type:ty, $from_method:expr, $into_method:expr) => { |
||||
impl FuelIntoH256 for $type { |
||||
fn into_h256(self) -> H256 { |
||||
let method: fn($type) -> H256 = $into_method; |
||||
method(self) |
||||
} |
||||
} |
||||
|
||||
impl FuelIntoH256 for &$type { |
||||
fn into_h256(self) -> H256 { |
||||
let method: fn($type) -> H256 = $into_method; |
||||
method(self.clone()) |
||||
} |
||||
} |
||||
|
||||
impl FuelFromH256 for $type { |
||||
fn from_h256(v: &H256) -> Self { |
||||
let method: fn(&H256) -> $type = $from_method; |
||||
method(v) |
||||
} |
||||
} |
||||
}; |
||||
} |
||||
|
||||
impl_h256!( |
||||
fuels::prelude::Bech32ContractId, |
||||
|v| fuels::prelude::Bech32ContractId::from(fuels::prelude::ContractId::new(v.0)), |
||||
|v| H256::from(*v.hash) |
||||
); |
||||
|
||||
impl_h256!( |
||||
fuels::prelude::Bits256, |
||||
|v| fuels::prelude::Bits256(v.0), |
||||
|v| H256::from(v.0) |
||||
); |
||||
|
||||
impl_h256!( |
||||
fuels::prelude::ContractId, |
||||
|v| fuels::prelude::ContractId::new(v.0), |
||||
|v| H256::from(<[u8; 32]>::from(v)) |
||||
); |
@ -0,0 +1,30 @@ |
||||
use fuels::client::FuelClient; |
||||
use fuels::prelude::Provider; |
||||
|
||||
use hyperlane_core::{ChainCommunicationError, ChainResult}; |
||||
|
||||
/// Fuel connection configuration
|
||||
#[derive(Debug, serde::Deserialize, Clone)] |
||||
pub struct ConnectionConf { |
||||
/// Fully qualified string to connect to
|
||||
url: String, |
||||
} |
||||
|
||||
#[derive(thiserror::Error, Debug)] |
||||
#[error(transparent)] |
||||
struct FuelNewConnectionError(#[from] anyhow::Error); |
||||
|
||||
impl From<FuelNewConnectionError> for ChainCommunicationError { |
||||
fn from(err: FuelNewConnectionError) -> Self { |
||||
ChainCommunicationError::from_other(err) |
||||
} |
||||
} |
||||
|
||||
fn make_client(conf: &ConnectionConf) -> ChainResult<FuelClient> { |
||||
FuelClient::new(&conf.url).map_err(|e| FuelNewConnectionError(e).into()) |
||||
} |
||||
|
||||
/// Create a new fuel provider and connection
|
||||
pub fn make_provider(conf: &ConnectionConf) -> ChainResult<Provider> { |
||||
Ok(Provider::new(make_client(conf)?)) |
||||
} |
@ -1,3 +1,3 @@ |
||||
fn main() { |
||||
abigen::generate_bindings_for_dir("./abis", "./src/contracts") |
||||
abigen::generate_bindings_for_dir("./abis", "./src/contracts", abigen::BuildType::Ethers) |
||||
} |
||||
|
Loading…
Reference in new issue