use fuels::{
accounts::{
signers::private_key::PrivateKeySigner,
wallet::Unlocked,
},
prelude::*,
types::ContractId,
};
abigen!(
Contract(
name = "MarginAccountOracle",
abi =
"contracts/margin-account-oracle/out/release/margin-account-oracle-abi.json"
),
Contract(
name = "MarginAccount",
abi = "contracts/margin-account/out/release/margin-account-abi.json"
),
Contract(
name = "LargeContract",
abi =
"contracts/test_artifacts/large_contract/out/release/large-contract-abi.json"
)
);
pub async fn deploy_blob(wallet: &Wallet<Unlocked<PrivateKeySigner>>) -> ContractId {
let max_words_per_blob = 10_000;
let blobs = Contract::load_from(
"../test_artifacts/large_contract/out/release/large-contract.bin",
LoadConfiguration::default(),
)
.unwrap()
.convert_to_loader(max_words_per_blob)
.unwrap()
.blobs()
.to_vec();
let blob = blobs[0].clone();
let mut builder = BlobTransactionBuilder::default().with_blob(blob.clone());
wallet.adjust_for_fee(&mut builder, 0).await.unwrap();
wallet.add_witnesses(&mut builder).unwrap();
let tx = builder
.build(&wallet.try_provider().unwrap())
.await
.unwrap();
wallet
.try_provider()
.unwrap()
.send_transaction_and_await_commit(tx)
.await
.unwrap()
.check(None)
.unwrap();
ContractId::from(blob.id())
}
pub async fn setup_wallets() -> (
Wallet<Unlocked<PrivateKeySigner>>,
Wallet<Unlocked<PrivateKeySigner>>,
Wallet<Unlocked<PrivateKeySigner>>,
) {
let mut wallets = launch_custom_provider_and_get_wallets(
WalletsConfig::new(
Some(3),
Some(1), Some(1_000_000_000), ),
None,
None,
)
.await
.unwrap();
let wallet_1 = wallets.pop().unwrap();
let wallet_2 = wallets.pop().unwrap();
let wallet_3 = wallets.pop().unwrap();
(wallet_1, wallet_2, wallet_3)
}
pub async fn setup_oracle(
wallet: &Wallet<Unlocked<PrivateKeySigner>>,
) -> (
MarginAccountOracle<Wallet<Unlocked<PrivateKeySigner>>>,
ContractId,
) {
let id = Contract::load_from(
"./out/release/margin-account-oracle.bin",
LoadConfiguration::default(),
)
.unwrap()
.deploy(wallet, TxPolicies::default())
.await
.unwrap()
.contract_id;
let instance = MarginAccountOracle::new(id, wallet.clone());
(instance, id)
}
pub async fn setup_margin_account(
wallet: &Wallet<Unlocked<PrivateKeySigner>>,
) -> (
MarginAccount<Wallet<Unlocked<PrivateKeySigner>>>,
ContractId,
) {
let id = Contract::load_from(
"../margin-account/out/release/margin-account.bin",
LoadConfiguration::default(),
)
.unwrap()
.deploy(wallet, TxPolicies::default())
.await
.unwrap()
.contract_id;
let instance = MarginAccount::new(id, wallet.clone());
(instance, id)
}