Skip to content

Commit ed5476d

Browse files
committed
upgrading to use the new contract API
1 parent ad3ee4c commit ed5476d

File tree

14 files changed

+66
-53
lines changed

14 files changed

+66
-53
lines changed

apps/fortuna/src/api/revelation.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ pub async fn revelation(
4545
.get(&chain_id)
4646
.ok_or(RestError::InvalidChainId)?;
4747

48-
let maybe_request_fut = state.contract.get_request(state.provider_address, sequence);
48+
let maybe_request_fut = state.contract.get_request_v2(state.provider_address, sequence);
4949

5050
let current_block_number_fut = state
5151
.contract

apps/fortuna/src/chain/ethereum.rs

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -233,29 +233,21 @@ impl InstrumentedPythContract {
233233

234234
#[async_trait]
235235
impl<T: JsonRpcClient + 'static> EntropyReader for PythRandom<Provider<T>> {
236-
async fn get_request(
236+
async fn get_request_v2(
237237
&self,
238238
provider_address: Address,
239239
sequence_number: u64,
240240
) -> Result<Option<reader::Request>> {
241-
let r = self
242-
.get_request(provider_address, sequence_number)
243-
// TODO: This doesn't work for lighlink right now. Figure out how to do this in lightlink
244-
// .block(ethers::core::types::BlockNumber::Finalized)
241+
let request = self
242+
.get_request_v2(provider_address, sequence_number)
245243
.call()
246244
.await?;
247-
248-
// sequence_number == 0 means the request does not exist.
249-
if r.sequence_number != 0 {
250-
Ok(Some(reader::Request {
251-
provider: r.provider,
252-
sequence_number: r.sequence_number,
253-
block_number: r.block_number,
254-
use_blockhash: r.use_blockhash,
255-
}))
256-
} else {
257-
Ok(None)
258-
}
245+
Ok(Some(reader::Request {
246+
provider: request.provider,
247+
sequence_number: request.sequence_number,
248+
block_number: request.block_number,
249+
use_blockhash: request.use_blockhash,
250+
}))
259251
}
260252

261253
async fn get_block_number(&self, confirmed_block_status: BlockStatus) -> Result<BlockNumber> {

apps/fortuna/src/chain/reader.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ pub trait EntropyReader: Send + Sync {
4242
/// Get an in-flight request (if it exists)
4343
/// Note that if we support additional blockchains in the future, the type of `provider` may
4444
/// need to become more generic.
45-
async fn get_request(&self, provider: Address, sequence_number: u64)
45+
async fn get_request_v2(&self, provider: Address, sequence_number: u64)
4646
-> Result<Option<Request>>;
4747

4848
async fn get_block_number(&self, confirmed_block_status: BlockStatus) -> Result<BlockNumber>;
@@ -141,7 +141,7 @@ pub mod mock {
141141

142142
#[async_trait]
143143
impl EntropyReader for MockEntropyReader {
144-
async fn get_request(
144+
async fn get_request_v2(
145145
&self,
146146
provider: Address,
147147
sequence_number: u64,

apps/fortuna/src/command/get_request.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ pub async fn get_request(opts: &GetRequestOptions) -> Result<()> {
1414
&Config::load(&opts.config.config)?.get_chain_config(&opts.chain_id)?,
1515
)?);
1616

17-
let p = contract.get_provider_info(opts.provider).call().await?;
17+
let p = contract.get_provider_info_v2(opts.provider).call().await?;
1818

1919
tracing::info!("Found provider: {:?}", p);
2020

2121
let r = contract
22-
.get_request(opts.provider, opts.sequence)
22+
.get_request_v2(opts.provider, opts.sequence)
2323
.call()
2424
.await?;
2525
tracing::info!("Found request: {:?}", r);

apps/fortuna/src/command/inspect.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use {
22
crate::{
3-
chain::ethereum::{EntropyStructsRequest, PythContract},
3+
chain::ethereum::{EntropyStructsV2Request, PythContract},
44
config::{Config, EthereumConfig, InspectOptions},
55
},
66
anyhow::Result,
@@ -43,7 +43,7 @@ async fn inspect_chain(
4343

4444
let contract = PythContract::from_config(chain_config)?;
4545
let entropy_provider = contract.get_default_provider().call().await?;
46-
let provider_info = contract.get_provider_info(entropy_provider).call().await?;
46+
let provider_info = contract.get_provider_info_v2(entropy_provider).call().await?;
4747
let mut current_request_number = provider_info.sequence_number;
4848
println!("Initial request number: {}", current_request_number);
4949
let last_request_number = current_request_number.saturating_sub(num_requests);
@@ -61,12 +61,12 @@ async fn inspect_chain(
6161
break;
6262
}
6363
multicall.add_call(
64-
contract.get_request(entropy_provider, current_request_number),
64+
contract.get_request_v2(entropy_provider, current_request_number),
6565
false,
6666
);
6767
current_request_number -= 1;
6868
}
69-
let return_data: Vec<EntropyStructsRequest> = multicall.call_array().await?;
69+
let return_data: Vec<EntropyStructsV2Request> = multicall.call_array().await?;
7070
for request in return_data {
7171
process_request(rpc_provider.clone(), request).await?;
7272
}
@@ -76,7 +76,7 @@ async fn inspect_chain(
7676
println!("Multicall not deployed in this chain, fetching requests one by one");
7777
while current_request_number > last_request_number {
7878
let request = contract
79-
.get_request(entropy_provider, current_request_number)
79+
.get_request_v2(entropy_provider, current_request_number)
8080
.call()
8181
.await?;
8282
process_request(rpc_provider.clone(), request).await?;
@@ -91,9 +91,9 @@ async fn inspect_chain(
9191

9292
async fn process_request(
9393
rpc_provider: Provider<Http>,
94-
request: EntropyStructsRequest,
94+
request: EntropyStructsV2Request,
9595
) -> Result<()> {
96-
if request.sequence_number != 0 && request.is_request_with_callback {
96+
if request.sequence_number != 0 && request.callback_status != 0 {
9797
let block = rpc_provider
9898
.get_block(request.block_number)
9999
.await?

apps/fortuna/src/command/run.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ async fn setup_chain_state(
228228
.cmp(&c2.original_commitment_sequence_number)
229229
});
230230

231-
let provider_info = contract.get_provider_info(*provider).call().await?;
231+
let provider_info = contract.get_provider_info_v2(*provider).call().await?;
232232
let latest_metadata = bincode::deserialize::<CommitmentMetadata>(
233233
&provider_info.commitment_metadata,
234234
)

apps/fortuna/src/command/setup_provider.rs

Lines changed: 36 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
11
use {
22
crate::{
33
api::{get_register_uri, ChainId},
4-
chain::ethereum::{EntropyStructsProviderInfo, SignablePythContract},
4+
chain::ethereum::{EntropyStructsV2ProviderInfo, SignablePythContract},
55
command::register_provider::{register_provider_from_config, CommitmentMetadata},
66
config::{Config, EthereumConfig, SetupProviderOptions},
77
state::{HashChainState, PebbleHashChain},
8-
},
9-
anyhow::{anyhow, Result},
10-
ethers::{
8+
}, anyhow::{anyhow, Result}, ethers::{
119
abi::Bytes as AbiBytes,
1210
signers::{LocalWallet, Signer},
1311
types::{Address, Bytes},
14-
},
15-
futures::future::join_all,
16-
std::sync::Arc,
17-
tokio::spawn,
18-
tracing::Instrument,
12+
}, futures::future::join_all, std::sync::Arc, tokio::spawn, tracing::Instrument
1913
};
2014

2115
/// Setup provider for all the chains.
@@ -76,7 +70,7 @@ async fn setup_chain_provider(
7670
let contract = Arc::new(SignablePythContract::from_config(chain_config, &private_key).await?);
7771

7872
tracing::info!("Fetching provider info");
79-
let provider_info = contract.get_provider_info(provider_address).call().await?;
73+
let provider_info = contract.get_provider_info_v2(provider_address).call().await?;
8074
tracing::info!("Provider info: {:?}", provider_info);
8175

8276
let mut register = false;
@@ -146,7 +140,7 @@ async fn setup_chain_provider(
146140
tracing::info!("Registered");
147141
}
148142

149-
let provider_info = contract.get_provider_info(provider_address).call().await?;
143+
let provider_info = contract.get_provider_info_v2(provider_address).call().await?;
150144

151145
sync_fee(&contract, &provider_info, chain_config.fee)
152146
.in_current_span()
@@ -173,12 +167,20 @@ async fn setup_chain_provider(
173167
.in_current_span()
174168
.await?;
175169

170+
sync_default_gas_limit(
171+
&contract,
172+
&provider_info,
173+
chain_config.gas_limit,
174+
)
175+
.in_current_span()
176+
.await?;
177+
176178
Ok(())
177179
}
178180

179181
async fn sync_uri(
180182
contract: &Arc<SignablePythContract>,
181-
provider_info: &EntropyStructsProviderInfo,
183+
provider_info: &EntropyStructsV2ProviderInfo,
182184
uri: String,
183185
) -> Result<()> {
184186
let uri_as_bytes: Bytes = AbiBytes::from(uri.as_str()).into();
@@ -198,7 +200,7 @@ async fn sync_uri(
198200

199201
async fn sync_fee(
200202
contract: &Arc<SignablePythContract>,
201-
provider_info: &EntropyStructsProviderInfo,
203+
provider_info: &EntropyStructsV2ProviderInfo,
202204
provider_fee: u128,
203205
) -> Result<()> {
204206
if provider_info.fee_in_wei != provider_fee {
@@ -217,7 +219,7 @@ async fn sync_fee(
217219

218220
async fn sync_fee_manager(
219221
contract: &Arc<SignablePythContract>,
220-
provider_info: &EntropyStructsProviderInfo,
222+
provider_info: &EntropyStructsV2ProviderInfo,
221223
fee_manager: Address,
222224
) -> Result<()> {
223225
if provider_info.fee_manager != fee_manager {
@@ -231,7 +233,7 @@ async fn sync_fee_manager(
231233

232234
async fn sync_max_num_hashes(
233235
contract: &Arc<SignablePythContract>,
234-
provider_info: &EntropyStructsProviderInfo,
236+
provider_info: &EntropyStructsV2ProviderInfo,
235237
max_num_hashes: u32,
236238
) -> Result<()> {
237239
if provider_info.max_num_hashes != max_num_hashes {
@@ -247,3 +249,22 @@ async fn sync_max_num_hashes(
247249
}
248250
Ok(())
249251
}
252+
253+
async fn sync_default_gas_limit(
254+
contract: &Arc<SignablePythContract>,
255+
provider_info: &EntropyStructsV2ProviderInfo,
256+
default_gas_limit: u32,
257+
) -> Result<()> {
258+
if provider_info.default_gas_limit != default_gas_limit {
259+
tracing::info!("Updating provider default gas limit to {:?}", default_gas_limit);
260+
if let Some(receipt) = contract
261+
.set_default_gas_limit(default_gas_limit)
262+
.send()
263+
.await?
264+
.await?
265+
{
266+
tracing::info!("Updated provider default gas limit to : {:?}", receipt);
267+
}
268+
}
269+
Ok(())
270+
}

apps/fortuna/src/command/withdraw_fees.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ pub async fn withdraw_fees_for_chain(
5858
retained_balance: u128,
5959
) -> Result<()> {
6060
tracing::info!("Fetching fees for provider: {:?}", provider_address);
61-
let provider_info = contract.get_provider_info(provider_address).call().await?;
61+
let provider_info = contract.get_provider_info_v2(provider_address).call().await?;
6262
let fees = provider_info.accrued_fees_in_wei;
6363
tracing::info!("Accrued fees: {} wei", fees);
6464

apps/fortuna/src/config.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ pub struct EthereumConfig {
136136
pub legacy_tx: bool,
137137

138138
/// The gas limit to use for entropy callback transactions.
139-
pub gas_limit: u64,
139+
pub gas_limit: u32,
140140

141141
/// The percentage multiplier to apply to priority fee estimates (100 = no change, e.g. 150 = 150% of base fee)
142142
#[serde(default = "default_priority_fee_multiplier_pct")]

apps/fortuna/src/keeper.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ pub async fn run_keeper_threads(
150150
// near the maximum gas limit.
151151
// In the unlikely event that the keeper fees aren't sufficient, the solution to this is to configure the target
152152
// fee percentage to be higher on that specific chain.
153-
chain_eth_config.gas_limit,
153+
chain_eth_config.gas_limit.into(),
154154
// NOTE: unwrap() here so we panic early if someone configures these values below -100.
155155
u64::try_from(100 + chain_eth_config.min_profit_pct)
156156
.expect("min_profit_pct must be >= -100"),

0 commit comments

Comments
 (0)